MCP (Model Context Protocol) server adapter for parsimony — exposes a Connectors collection as MCP tools over stdio.
Project description
parsimony-mcp
MCP (Model Context Protocol) stdio server adapter for parsimony — exposes any installed
parsimony-*connector as an MCP tool to Claude Desktop, Cursor, Continue, or any other MCP-compatible agent runtime.
Alpha — 0.1.0a1. API surface is stable; error messages, instruction template, and logging format may iterate.
Quickstart
1. Install — in whatever Python environment your MCP client launches from:
pip install parsimony-mcp
# Install at least one connector plugin — without plugins, the server starts with 0 tools:
pip install parsimony-fred # example; replace with whichever you need
2. Wire it into your MCP client. For Claude Desktop, paste this into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"parsimony": {
"command": "/absolute/path/to/your/venv/bin/parsimony-mcp",
"env": {
"FRED_API_KEY": "your-fred-key-here",
"PARSIMONY_MCP_LOG_LEVEL": "INFO"
}
}
}
}
Replace /absolute/path/to/your/venv/bin/parsimony-mcp with the output of which parsimony-mcp in the env where you installed the package. Restart Claude Desktop after editing the config.
3. Verify. In Claude Desktop's chat, type "list parsimony tools" — you should see the connectors from whichever plugins you installed. If you see "no tools" check the Claude Desktop log pane and the troubleshooting matrix below.
What this server exposes
parsimony-mcp is a discovery layer. It surfaces connectors whose authors tagged them tool — typically search, list, and metadata endpoints. For bulk data retrieval (full time series, multi-year history), the MCP instructions tell the agent to write Python using parsimony.client[...] and execute it in a separate code-execution tool (e.g. computer_use, a Jupyter kernel, or repl).
The exact tool surface depends on which parsimony-* plugins are installed in your venv. See the parsimony-connectors monorepo for the authoritative list of official connectors, their auth requirements, and rate-limit classes.
Security note. Every installed parsimony-* package grants it code execution inside every MCP session on your machine. Only install plugins you trust. If you need to lock down which plugins load, set the PARSIMONY_PROVIDERS_ALLOWLIST env var (handled by the kernel's discovery layer; see parsimony docs).
Configuration
| Env var | Default | Effect |
|---|---|---|
PARSIMONY_MCP_LOG_LEVEL |
WARN |
Python log level for the parsimony_mcp.* logger family. Set INFO to see startup connector count + discovery timing; set DEBUG for per-call traces. All logs go to stderr (stdout is owned by the MCP protocol). |
<PLUGIN>_API_KEY et al. |
— | Each connector plugin has its own credential env vars. See the plugin's README. |
The server itself takes no CLI flags. The console script is parsimony-mcp; equivalent to python -m parsimony_mcp.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Claude Desktop shows "Server disconnected" or the server never appears | Wrong path to parsimony-mcp in the config command field |
Run which parsimony-mcp in the venv where you installed the package; paste the full absolute path into the config. Restart Claude Desktop. |
| "0 tools available" / no tools listed | No plugin packages installed | pip install parsimony-fred (or any other parsimony-* package); restart Claude Desktop. |
| Tool call returns "Authentication error for X" | Connector-specific env var missing | Check the plugin's README for the required env var name; add it to the env block in claude_desktop_config.json. |
Tool call returns "Rate limit for X" with DO NOT retry directive |
Upstream provider rate-limited you | The agent will not retry automatically. Either wait, pick a different connector, or upgrade the upstream plan. |
| Tool call returns "timed out after 30s" | Upstream is slow or network partition | The 30s timeout is deliberate — an agent running call_tool for minutes helps nobody. Retry manually if upstream recovers. |
| JSON parse errors in Claude Desktop's MCP log | Something is writing to stdout that isn't MCP JSON-RPC | Check for plugins that print() at import time. Report the plugin to its author; the MCP adapter's stdout is reserved for protocol framing. |
Programmatic use
If you need to embed the server in your own Python process (custom transport, multi-tenant runtime, etc.):
from parsimony.discovery import build_connectors_from_env
from parsimony_mcp import create_server
connectors = build_connectors_from_env().filter(tags=["tool"])
server = create_server(connectors)
# `server` is an mcp.server.lowlevel.Server — attach any transport you like.
The three re-exports from parsimony_mcp (create_server, connector_to_tool, result_to_content) are the stable public API.
Development
git clone https://github.com/ockham-sh/parsimony-mcp
cd parsimony-mcp
uv venv
uv pip install -e ".[dev]"
uv run pytest # 47 tests, ~1s
uv run ruff check parsimony_mcp tests
uv run mypy parsimony_mcp
parsimony-core is a dependency; during development you'll typically install it editable alongside:
uv pip install -e ../parsimony -e ".[dev]"
License
Apache-2.0 — see LICENSE.
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 parsimony_mcp-0.1.0a1.tar.gz.
File metadata
- Download URL: parsimony_mcp-0.1.0a1.tar.gz
- Upload date:
- Size: 74.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fe41fe07756d6047643daf3f3f32580a1a5c537bc4bdfec10915524398517bd
|
|
| MD5 |
0bca944e362c872b7a351c61f06d6bd6
|
|
| BLAKE2b-256 |
8b4b783dcb9383e658a0c78b6425deb766ce050652705f0fe0c6de1fc2a2977c
|
Provenance
The following attestation bundles were made for parsimony_mcp-0.1.0a1.tar.gz:
Publisher:
release.yml on ockham-sh/parsimony-connectors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
parsimony_mcp-0.1.0a1.tar.gz -
Subject digest:
7fe41fe07756d6047643daf3f3f32580a1a5c537bc4bdfec10915524398517bd - Sigstore transparency entry: 1342717674
- Sigstore integration time:
-
Permalink:
ockham-sh/parsimony-connectors@b12ee790dddf96522c71ba699ba109458e5db3ed -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ockham-sh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b12ee790dddf96522c71ba699ba109458e5db3ed -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file parsimony_mcp-0.1.0a1-py3-none-any.whl.
File metadata
- Download URL: parsimony_mcp-0.1.0a1-py3-none-any.whl
- Upload date:
- Size: 58.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a76dda174b77bf7d847faf0032d585e222b68663387596b39b227208728e6cec
|
|
| MD5 |
44b7e05c4bd2c79acd1debde29bbc9d5
|
|
| BLAKE2b-256 |
1f67bba4e562eb953d5207bdae3a72acc6029519490eb1b599ad3ffd80b8981d
|
Provenance
The following attestation bundles were made for parsimony_mcp-0.1.0a1-py3-none-any.whl:
Publisher:
release.yml on ockham-sh/parsimony-connectors
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
parsimony_mcp-0.1.0a1-py3-none-any.whl -
Subject digest:
a76dda174b77bf7d847faf0032d585e222b68663387596b39b227208728e6cec - Sigstore transparency entry: 1342717675
- Sigstore integration time:
-
Permalink:
ockham-sh/parsimony-connectors@b12ee790dddf96522c71ba699ba109458e5db3ed -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ockham-sh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b12ee790dddf96522c71ba699ba109458e5db3ed -
Trigger Event:
workflow_dispatch
-
Statement type: