MCP server exposing Storywrangler documentation and the dataset registry to AI agents
Project description
storywrangler-mcp
MCP server that lets AI agents work with the Storywrangler platform. Modeled on
the Svelte team's @sveltejs/mcp and vcsi-starter's @the-vcsi/scrolly-mcp:
the server holds no content — it fetches documentation from the docs site's
llms.txt exports and dataset metadata from the live registry API, so nothing
can drift.
Tools
| Tool | Source | Purpose |
|---|---|---|
list-sections |
docs site /sections.json |
Discover documentation sections (guides + per-tag API reference) |
get-documentation |
docs site /{slug}/llms.txt |
Fetch section markdown, with fuzzy matching |
list-datasets |
API /registry/ |
List registered datasets with queryable dimensions |
get-dataset |
API /registry/{domain}/{dataset_id} |
Ground-truth metadata: level_order, filter_values, availability |
validate-submission |
local (storywrangler-schemas) | Dry-run a DatasetCreate payload: real Pydantic contract, mirrored server guards, conflation lints, on-disk hive layout checks when reachable |
Usage
Remote (streamable HTTP) — the backend mounts this same server at /mcp
(see backend/app/main.py). No install needed:
{
"mcpServers": {
"storywrangler": {
"type": "http",
"url": "https://storywrangler.uvm.edu/mcp/"
}
}
}
Keep the trailing slash — /mcp works but costs a 307 redirect per request.
On the server, set STORYWRANGLER_DOCS_URL/STORYWRANGLER_URL to localhost
addresses so tool fetches don't loop through the public proxy. Note: remote
clients validate TLS strictly; this endpoint is unusable externally until the
uvm.edu certificate mismatch is fixed.
Local (stdio) — works offline and pins a version:
{
"mcpServers": {
"storywrangler": {
"command": "uvx",
"args": ["storywrangler-mcp"]
}
}
}
CLI mode
Every tool also works as a shell command — the fallback for subagents and CI where no MCP connection exists:
uvx storywrangler-mcp list-sections
uvx storywrangler-mcp get-documentation register querying
uvx storywrangler-mcp list-datasets
uvx storywrangler-mcp get-dataset wikimedia ngrams --full
uvx storywrangler-mcp validate-submission payload.json # '-' reads stdin
validate-submission exits non-zero on blocking errors, so a pipeline can
gate its submit step on it (add --no-disk to skip layout checks).
Configuration
| Env var | Default | Meaning |
|---|---|---|
STORYWRANGLER_DOCS_URL |
https://storywrangler.uvm.edu |
Docs site base URL |
STORYWRANGLER_URL |
https://storywrangler.uvm.edu |
API base URL (same var the SDK uses) |
STORYWRANGLER_INSECURE |
unset | Set to 1 to skip TLS verification (the uvm.edu deployment currently serves a mismatched certificate — fix pending) |
Point both at http://localhost:5173 / http://localhost:8000 for local development.
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 storywrangler_mcp-0.1.0.tar.gz.
File metadata
- Download URL: storywrangler_mcp-0.1.0.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b4903c31f597c2f20ef361bfcf74025d0f16f2d88545c6e5490072f8a1cfa73
|
|
| MD5 |
863f72f90fcba6a1f896814dad08f69a
|
|
| BLAKE2b-256 |
f0b77b6c2c2ea7cd9eca8c3ff706df08b3f8c775cff2222bae7f043ed455d5b6
|
File details
Details for the file storywrangler_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: storywrangler_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cba75ac87c7616c56cb4af6246c4a9261a4502fd7e803d350d2d0f762cd73f13
|
|
| MD5 |
eb8c765252d81130b89e9b7a26cc920e
|
|
| BLAKE2b-256 |
2249c019ef12cf38cab8277d50ef49c20dcb1314645106f78482eea937349f6d
|