Skip to main content
Glama

mcp2ws

Did you just wake up from a 20 year coma? Did you build a bunch of buzzword compliant web services back in the early 2000s and want all your SOAP and WSDL to be relevant again?

Now you can put the smooth sheen of AI on your pile of angle brackets by exposing your SOAP-based web service as a Model Context Protocol (MCP) server. It's time to wake from that coma and start hallucinating.

What?

To explain the joke: back in the early 2000s web services were promoted heavily by several companies as the future of how organizations interoperate with each other. The specific vision included a plethora of XML-based communication formats that never caught on broadly. Instead REST-ful web apis became the norm. But now 20 years later, MCP arrives claiming it too is the future of how companies interoperate, at least for AI-related applications. And unlike SOAP, there are a lot of very useful MCP servers and client delivering on that promise. So the conceit of this repos is to give SOAP-based web services a second chance at the limelight.

Related MCP server: soap-api-gateway

Prerequisites

  • Have a web service described by a WSDL file.

  • Have a compatible version of Python (tested with 3.13) or uv installed on your computer.

Running

With uv:

uv run main.py

With regular python:

python -m venv venv
source ./venv/bin/activate
pip install -r requirements.txt
python main.py

Usage

To start the MCP server, run the main.py script with the URL of the WSDL file you want to access.

uv run main.py <WSDL_URL>

For example, if you have a WSDL at http://www.dneonline.com/calculator.asmx?wsdl:

uv run main.py http://www.dneonline.com/calculator.asmx?wsdl

This tool has been tested with these random WSDL files I found on the internet:

Configure your agentic coding tool

Configure your MCP client (e.g., Gemini CLI, or an IDE extension) to run this script.

Example generic MCP config:

{
  "mcpServers": {
    "soap-service": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/path/to/mcp2ws/pyproject.toml",
        "/path/to/mcp2ws/main.py",
        "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL"
      ]
    }
  }
}

Example Session

In Gemini CLI, using the http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL service:

> What is the capital city of France? Use the soap tool.

✦ I will find the ISO code for France and then use it to get the capital city.

╭────────────────────────────────────────────────────────────────────────╮
│ ✓  CountryISOCode (soap-service MCP Server) {"sCountryName":"France"}  │
│                                                                        │
│ FR                                                                     │
╰────────────────────────────────────────────────────────────────────────╯
✦ I will now retrieve the capital city of France using its ISO code.
╭────────────────────────────────────────────────────────────────────────╮
│ ✓  CapitalCity (soap-service MCP Server) {"sCountryISOCode":"FR"}      │
│                                                                        │
│ Paris                                                                  │
╰────────────────────────────────────────────────────────────────────────╯
✦ The capital city of France is Paris.

TODO

  • Expose <documentation/> tags from WSDL in the tool listing. I don't know how standard this is, but I've seen these tags in .ASMX WSDL files.

  • Better support for mapping XML schema to JSON schema for input. Currently only primitive types are supported.

  • Add tests.

  • Run evals and optimize the how the tools are described in the MCP protocol.

  • Implement support for more web service standards like WS-* and UDDI. This probably won't happen because this stops being a fun joke and starts being a job.

Available Tools

21 tools
CapitalCityD

SOAP method: CapitalCity

Inputs: sCountryISOCode (required).

CountriesUsingCurrencyD

SOAP method: CountriesUsingCurrency

Inputs: sISOCurrencyCode (required).

CountryCurrencyD

SOAP method: CountryCurrency

Inputs: sCountryISOCode (required).

CountryFlagD

SOAP method: CountryFlag

Inputs: sCountryISOCode (required).

CountryIntPhoneCodeD

SOAP method: CountryIntPhoneCode

Inputs: sCountryISOCode (required).

CountryISOCodeD

SOAP method: CountryISOCode

Inputs: sCountryName (required).

CountryNameD

SOAP method: CountryName

Inputs: sCountryISOCode (required).

CurrencyNameD

SOAP method: CurrencyName

Inputs: sCurrencyISOCode (required).

FullCountryInfoD

SOAP method: FullCountryInfo

Inputs: sCountryISOCode (required).

FullCountryInfoAllCountriesC

SOAP method: FullCountryInfoAllCountries

Inputs: no named parameters.

LanguageISOCodeD

SOAP method: LanguageISOCode

Inputs: sLanguageName (required).

LanguageNameD

SOAP method: LanguageName

Inputs: sISOCode (required).

ListOfContinentsByCodeC

SOAP method: ListOfContinentsByCode

Inputs: no named parameters.

ListOfContinentsByNameC

SOAP method: ListOfContinentsByName

Inputs: no named parameters.

ListOfCountryNamesByCodeC

SOAP method: ListOfCountryNamesByCode

Inputs: no named parameters.

ListOfCountryNamesByNameC

SOAP method: ListOfCountryNamesByName

Inputs: no named parameters.

ListOfCountryNamesGroupedByContinentC

SOAP method: ListOfCountryNamesGroupedByContinent

Inputs: no named parameters.

ListOfCurrenciesByCodeC

SOAP method: ListOfCurrenciesByCode

Inputs: no named parameters.

ListOfCurrenciesByNameC

SOAP method: ListOfCurrenciesByName

Inputs: no named parameters.

ListOfLanguagesByCodeC

SOAP method: ListOfLanguagesByCode

Inputs: no named parameters.

ListOfLanguagesByNameC

SOAP method: ListOfLanguagesByName

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.5/5.0

    Scored across 21 tools

    Disambiguation5/5

    Every tool has a clearly distinct purpose targeting specific geographic or cultural data attributes (e.g., capital city, currency, flag, phone code). There is no overlap in functionality, and the descriptions precisely indicate what each tool retrieves, making misselection unlikely.

    Naming Consistency5/5

    All tool names follow a consistent PascalCase pattern with descriptive compound names (e.g., CountryCurrency, ListOfContinentsByName). The naming is predictable and readable throughout the set, with no deviations or mixed conventions.

    Tool Count3/5

    With 21 tools, the count is borderline high for a geographic data server, potentially feeling heavy. While each tool serves a distinct purpose, the number might be excessive for typical agent workflows, though not extreme.

    Completeness5/5

    The tool set provides comprehensive coverage for geographic and cultural data, including country details, currencies, languages, and continents. It supports both specific queries (e.g., CapitalCity) and bulk listings (e.g., FullCountryInfoAllCountries), with no obvious gaps in the domain.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      A self-hosted MCP gateway that turns REST, SOAP, GraphQL, and SQL endpoints into MCP tools, enabling AI clients like Claude and ChatGPT to interact with legacy and modern APIs without code changes.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Converts SOAP WSDL services into a REST interface and provides MCP tools to describe, invoke, and manage SOAP operations with caching and WS-Security support.
      1
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Exposes SOAP web services as Model Context Protocol (MCP) servers, allowing AI models to interact with legacy SOAP services through automatic method discovery and type mapping.
      MIT