AnythingMCP turns a SOAP web service into MCP tools for Claude, ChatGPT and Copilot without code. Give it the WSDL and each operation becomes a tool; AnythingMCP builds the SOAP envelope, keeps the WSDL parameter order that WCF services need and authenticates with HTTP Basic, a bearer token or an API-key header, so AI agents can call legacy enterprise SOAP APIs.
The SOAP connector lets you expose SOAP web services as MCP tools. It parses WSDL definitions, auto-generates tools for each operation, and handles SOAP envelope construction and parameter ordering.
Keywords: SOAP to MCP, WSDL to MCP, SOAP MCP bridge, enterprise API to MCP, WCF to MCP, legacy API integration MCP
- Go to Connectors > New Connector
- Select SOAP as the type
- Enter the WSDL URL (e.g.,
https://service.example.com/api?wsdl) - Configure authentication if needed
- Click Create
curl -s http://localhost:4000/api/connectors \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Enterprise CRM",
"type": "SOAP",
"baseUrl": "https://crm.example.com/service",
"specUrl": "https://crm.example.com/service?wsdl",
"authType": "BASIC_AUTH",
"authConfig": {
"username": "api-user",
"password": "api-pass"
}
}'Provide the WSDL URL and AnythingMCP will:
- Fetch and parse the WSDL definition
- Extract all SOAP operations
- Generate an MCP tool for each operation with proper parameters
curl -s http://localhost:4000/api/connectors/$CONNECTOR_ID/import \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"source": "wsdl",
"url": "https://crm.example.com/service?wsdl"
}'SOAP tools use a specific endpoint mapping format:
{
"method": "GetCustomerDetails",
"path": "CustomerServiceSoap12/BasicHttpBinding_ICustomerService",
"bodyMapping": {
"customerId": "$customer_id",
"includeOrders": "$include_orders"
}
}| Field | Description |
|---|---|
method |
SOAP operation name |
path |
SOAP port/binding path |
bodyMapping |
Maps tool params to SOAP envelope parameters |
AnythingMCP handles WCF-specific requirements:
- Parameter ordering — WSDL-defined parameter order is preserved (WCF services are order-sensitive)
- Endpoint override — The connector's
baseUrloverrides the WSDL endpoint host, useful for internal networks where the WSDL advertises external IPs - Multiple bindings — Each port/binding generates separate tools
| Auth Type | Description |
|---|---|
| None | No authentication |
| Basic Auth | HTTP Basic (username/password in header) |
| Bearer Token | Token in HTTP header |
| API Key | Key in a header you name (headerName, default X-API-Key) |
Not implemented yet: WS-Security (UsernameToken or signed SOAP headers) and TLS client certificates. The
WS_SECURITYandCERTIFICATEauth types exist in the data model, but the SOAP engine sends an empty<soapenv:Header/>and no client certificate, so a service that requires either will reject the call.
{
"authType": "BASIC_AUTH",
"authConfig": {
"username": "ws-user",
"password": "ws-pass"
}
}Suppose you have a legacy CRM with a WSDL at https://crm.internal.com/CustomerService?wsdl that exposes operations like GetCustomer, SearchCustomers, UpdateCustomer.
# 1. Create the SOAP connector
CONNECTOR_ID=$(curl -s http://localhost:4000/api/connectors \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "CRM Customer Service",
"type": "SOAP",
"baseUrl": "https://crm.internal.com",
"specUrl": "https://crm.internal.com/CustomerService?wsdl",
"authType": "BASIC_AUTH",
"authConfig": {
"username": "api-user",
"password": "api-pass"
}
}' | jq -r '.id')
# 2. Auto-import all SOAP operations as tools
curl -s http://localhost:4000/api/connectors/$CONNECTOR_ID/import-spec \
-H "Authorization: Bearer $TOKEN"After import, your AI client can call tools like GetCustomer, SearchCustomers, etc., and AnythingMCP builds the SOAP envelope and makes the call.
| Issue | Solution |
|---|---|
| WSDL fetch fails | Ensure the WSDL URL is reachable from the AnythingMCP backend container |
| Parameter order errors | AnythingMCP respects WSDL parameter ordering; verify the WSDL definition matches service expectations |
| "Unknown operation" or a schema fault | The engine sends document/literal wrapped requests: the body element is named after the operation (<tns:GetItem>), as WCF and JAX-WS generate. A WSDL whose input element has another name (GetItemRequest), RPC/encoded style, or nested complex-type parameters are not supported yet |
| WCF endpoint mismatch | Set baseUrl to the actual service URL; AnythingMCP overrides WSDL endpoint with this value |
| Authentication failures | Check the credentials and the auth type. A service that requires WS-Security headers or a client certificate cannot be called yet (see Authentication) |