MuleSoft Platform MCP Server
Welcome to MuleSoft MCP
AI agents are only as useful as the data and actions they can reach. Model Context Protocol (MCP) is an open protocol that gives LLMs a standardised way to connect to external data sources and trigger real-world actions — going far beyond static retrieval (RAG) to live data access and system-of-record writes.
This workshop shows you how to write a Mule application that acts as an MCP server. You will expose two tools to an AI agent: one that reads vendor data from SAP Concur and one that creates a purchase order. Then you will connect Anthropic Claude to the server and watch it reason across both tools to complete the task autonomously.
Why MCP matters for API developers
Traditional REST APIs are designed for human-readable documentation and client-authored requests. AI agents face different challenges:
- REST designs are opinionated — field names, pagination styles, and error shapes vary across every API, making it hard for an LLM to map intent to request structure
- Open semantics make agentic actions hard to govern — agents can call anything, anytime
- LLMs need API specifications annotated with natural-language metadata so they understand when and how to use each operation
- Every team building its own agent integration layer multiplies the maintenance burden
MCP addresses this by defining a common wire protocol and discovery mechanism. Once you publish an MCP server, any MCP-compatible LLM client can discover its tools and call them without bespoke integration work.
MCP server vs. MCP client
MuleSoft supports both roles in the same Mule application:
| Role | What it does | This workshop |
|---|---|---|
| MCP server | Exposes tools (and optionally resources and prompts) that LLM clients can discover and invoke | Yes — you will build this |
| MCP client | Calls tools on a remote MCP server, usually from inside an orchestration flow | Out of scope — covered separately |
The scenario
You are building an agent that creates purchase orders in SAP Concur. The agent needs to:
- Fetch the live vendor list from Concur (including a custom product-category field
Custom19) - Reason about which vendor matches the user’s request
- Submit a purchase order for the chosen vendor
You will implement both steps as MCP tools inside a single Mule application.
Claude (MCP client)
│
├─ calls get-vendors ──────────► Mule MCP Server ──► SAP Concur (read)
│ ← returns vendor list ◄──
│
└─ calls create-concur-purchase-order ──► Mule MCP Server ──► SAP Concur (write)
← returns order number ◄──
What you’ll build
- A Mule application configured with an MCP server using SSE transport
- A read tool (
get-vendors) that retrieves and filters vendor records via DataWeave - A write tool (
create-concur-purchase-order) that accepts structured parameters and submits a purchase order - An end-to-end test with Claude acting as the MCP client
Estimated time
| Section | Duration |
|---|---|
| Prerequisites | 15 min |
| Step 1: MCP Server Configuration | 20 min |
| Step 2: Read Tool — Get Vendors | 30 min |
| Step 3: Write Tool — Create Purchase Order | 30 min |
| Step 4: Connect to Claude | 20 min |
| Summary & Next Steps | 5 min |
Ready? Start with Prerequisites →