MCP server exposing the Wunder Mobility public API documentation
Project description
Wunder Mobility MCP
Give your AI coding assistant live knowledge of the Wunder Mobility API.
This is a Model Context Protocol (MCP) server that puts the full Wunder Mobility public API documentation — every guide, every endpoint, every request/response schema — directly inside your AI assistant.
Instead of copy-pasting docs or hoping your assistant's training data is up to date, you can just ask:
"What endpoints do I need to build a payment flow for my users?" "Show me the full spec for creating a booking." "How does vehicle discovery work in the User API?"
…and get back ranked, cited answers with deep-links straight to docs.wundermobility.services.
Works with Claude Code, Cursor, Windsurf, VS Code with Copilot, and any other MCP-compatible client.
What it does
The MCP server exposes four tools your assistant can call automatically:
| Tool | What your assistant uses it for |
|---|---|
search_api_docs(query) |
"Find the right endpoint or guide for this flow" — full-text search across all guides and OpenAPI specs. |
list_endpoints(api, tag?) |
"What endpoints exist in the User API under Payments?" — browse by API namespace and tag. |
get_endpoint_spec(operation_id) |
"Give me the exact request/response schema for this endpoint." — returns the raw OpenAPI operation object. |
get_guide(slug) |
"Explain how authentication works." — returns the full markdown guide. |
Every result includes a Stoplight deep-link so you (or your assistant) can open the same content in a browser.
Docs are pulled live from GitHub on every startup and cached locally — so your assistant always has the current API, not a stale snapshot.
Install
Option A — uvx (recommended, no cloning needed)
uvx runs the package directly from PyPI — no Python environment setup, no cloning.
Install uv if you don't have it:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
# or: brew install uv
# or: winget install astral-sh.uv # Windows
Claude Code:
claude mcp add wunder-api uvx wunder-mobility-mcp
Cursor — add to your MCP settings (~/.cursor/mcp.json or via Settings → MCP):
{
"mcpServers": {
"wunder-api": {
"command": "uvx",
"args": ["wunder-mobility-mcp"]
}
}
}
Windsurf — add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"wunder-api": {
"command": "uvx",
"args": ["wunder-mobility-mcp"]
}
}
}
Any client that accepts a command: use uvx as the command and ["wunder-mobility-mcp"] as the args.
On first start, the server fetches the latest docs from GitHub (~5–10s) and caches them locally. Every subsequent start is instant.
Option B — clone and run
If you'd rather run from source:
Prerequisites: Python 3.12+, git.
git clone https://github.com/Wunder-Mobility/public-api-mcp.git
cd public-api-mcp
make install
Claude Code:
claude mcp add wunder-api "$(pwd)/.venv/bin/wunder-mobility-mcp"
Cursor:
{
"mcpServers": {
"wunder-api": {
"command": "/path/to/public-api-mcp/.venv/bin/wunder-mobility-mcp"
}
}
}
Replace /path/to/public-api-mcp with your actual clone path (pwd inside the repo).
Option C — hosted URL (no local install at all)
Point your client at our hosted server — nothing to install or run locally.
Claude Code:
claude mcp add wunder-api --transport http https://mcp.wundermobility.services/mcp
Cursor / Windsurf / other clients:
{
"mcpServers": {
"wunder-api": {
"url": "https://mcp.wundermobility.services/mcp"
}
}
}
Verify it's working
Once connected, open your assistant and try:
- "Search the Wunder API docs for payment flow"
- "List all endpoints in the Wunder operations API"
- "Get the guide for user authentication"
You should see the tools being called and results coming back with Stoplight links.
How docs stay current
The docs live in Wunder-Mobility/public-api-docs — a public GitHub repo. On every server startup, this MCP downloads the latest tarball from that repo and caches it locally. No manual sync, no stale snapshots.
To get the latest docs locally: restart your MCP server (or restart your editor). The cache lives at:
| OS | Cache path |
|---|---|
| macOS | ~/Library/Caches/wunder-mobility-mcp/public-api-docs |
| Linux | ~/.cache/wunder-mobility-mcp/public-api-docs |
| Windows | %LOCALAPPDATA%\wunder-mobility-mcp\Cache\public-api-docs |
Development
make install # create .venv, install package + dev deps
make test # run the test suite (requires network on first run)
make run # start HTTP server on http://localhost:8080/mcp
make testfetches live docs from GitHub on the first run (~10s). Subsequent runs use the local cache.
Project structure
src/wunder_mcp/
docs_source.py # fetches & caches the docs tarball from GitHub
catalog.py # builds the in-memory guide + endpoint catalog
docs_links.py # parses toc.json and builds Stoplight deep-link URLs
openapi.py # loads and indexes OpenAPI specs
search.py # BM25 search index
server.py # MCP tool definitions (FastMCP)
app.py # HTTP entrypoint (uvicorn)
stdio.py # stdio entrypoint
Publishing a new version
- Bump
versioninpyproject.toml - Commit and tag:
git tag v0.x.x && git push --tags - The
publish.ymlworkflow builds and uploads to PyPI automatically via trusted publishing
One-time PyPI setup (before the first publish): go to pypi.org → your project → Publishing → add a trusted publisher with owner Wunder-Mobility, repo public-api-mcp, workflow publish.yml, environment pypi.
Deploying your own hosted instance
The server runs on AWS Lambda behind a Function URL. See template.yaml for the SAM definition.
Prerequisites: AWS CLI, SAM CLI (brew install aws-sam-cli), Python 3.12.
sam build
sam deploy --guided # first time; saves config to samconfig.toml
sam build && sam deploy # subsequent deploys
Doc changes don't require a redeploy — the Lambda fetches the latest docs on every cold start.
Roadmap
- v0.1 (current): read-only docs search, public and unauthenticated, docs fetched live on startup.
- v0.2: per-tenant API key auth + usage telemetry.
- v1.0: tools that call the live Wunder API directly (e.g.
create_test_booking), gated by a customer API key.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wunder_mobility_mcp-0.1.0.tar.gz.
File metadata
- Download URL: wunder_mobility_mcp-0.1.0.tar.gz
- Upload date:
- Size: 20.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffb0adef03752d7e0cf9832d4b1857b6846fb131ca7d87928be4e08552acae0a
|
|
| MD5 |
c009eb9faac6747fe25325b3d3d02d4f
|
|
| BLAKE2b-256 |
eb0e33bc2eb99b67bcf9f0dc7a43719b75c360b6dcc4d30888e7734a3d638c72
|
Provenance
The following attestation bundles were made for wunder_mobility_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on Wunder-Mobility/public-api-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wunder_mobility_mcp-0.1.0.tar.gz -
Subject digest:
ffb0adef03752d7e0cf9832d4b1857b6846fb131ca7d87928be4e08552acae0a - Sigstore transparency entry: 1676092309
- Sigstore integration time:
-
Permalink:
Wunder-Mobility/public-api-mcp@0f6bac65f5cf47d22a3fa96f238056409648e18f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Wunder-Mobility
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f6bac65f5cf47d22a3fa96f238056409648e18f -
Trigger Event:
push
-
Statement type:
File details
Details for the file wunder_mobility_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: wunder_mobility_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
531727319c8045d8f112fdb15b616e7689296fac84b847e94f190843e0344bef
|
|
| MD5 |
698d4e05604f2b52f1e9bfbee3fc6d11
|
|
| BLAKE2b-256 |
cacd94d740f80f96123a82a8a039a049c876d753365825b3e22dac528a58bdef
|
Provenance
The following attestation bundles were made for wunder_mobility_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Wunder-Mobility/public-api-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wunder_mobility_mcp-0.1.0-py3-none-any.whl -
Subject digest:
531727319c8045d8f112fdb15b616e7689296fac84b847e94f190843e0344bef - Sigstore transparency entry: 1676092327
- Sigstore integration time:
-
Permalink:
Wunder-Mobility/public-api-mcp@0f6bac65f5cf47d22a3fa96f238056409648e18f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/Wunder-Mobility
-
Access:
internal
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0f6bac65f5cf47d22a3fa96f238056409648e18f -
Trigger Event:
push
-
Statement type: