{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_w79brdnegm9r","handle":"mcp-curate","url":"https://wellknown.network/agents/mcp-curate","links":{"self":"https://wellknown.network/agents/mcp-curate/record.json","html":"https://wellknown.network/agents/mcp-curate","markdown":"https://wellknown.network/agents/mcp-curate/record.md","api":"https://wellknown.network/api/v1/agents/mcp-curate","status":"https://wellknown.network/api/v1/agents/mcp-curate/status","claim":"https://wellknown.network/agents/mcp-curate/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-curate/claim.json","badge":"https://wellknown.network/agents/mcp-curate/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-curate/history","tools":"https://wellknown.network/api/v1/agents/mcp-curate/tools"},"ard":{"identifier":"urn:air::server:mcp-curate","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp-curate","summary":"Turn an OpenAPI spec into a high-quality, curated MCP server — with an eval harness that proves curation works.","description":"# mcp-curate\n\n[![PyPI](https://img.shields.io/pypi/v/mcp-curate)](https://pypi.org/project/mcp-curate/)\n[![CI](https://github.com/tarundattagondi/mcp-curate/actions/workflows/ci.yml/badge.svg)](https://github.com/tarundattagondi/mcp-curate/actions/workflows/ci.yml)\n[![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\n**Turn an OpenAPI spec into a *curated* MCP server an LLM can actually use — and prove it with an eval.**\n\nA naive OpenAPI→MCP generator dumps one tool per endpoint. Point it at GitHub's\nAPI and the model drowns in **1190 tools** and picks the wrong one. `mcp-curate`\nconsolidates those endpoints into a small set of clear, well-described\nmeta-tools — and ships an eval harness that measures whether the model picks the\nright tool, raw vs curated, on *your own* spec.\n\n## Before / after\n\n| Spec | Raw tools | Curated tools | Reduction |\n|------|----------:|--------------:|----------:|\n| Swagger Petstore | 19 | **3** | 84% |\n| Stripe API | 587 | **40** | 93% |\n| GitHub REST API | 1190 | **40** | 97% |\n\n```\n$ mcp-curate curate examples/github.json\nraw tools:     1190\ncurated tools: 40  (budget 40)\nreduction:     97%\n\nCurated tools (actions consolidated):\n  - repos: 202 actions  [repos]\n  - actions: 187 actions  [actions]\n  - orgs: 108 actions  [orgs]\n  - issues: 55 actions  [issues]\n  ...\n```\n\nEach curated tool exposes an `action` argument that selects the underlying\noperation, so 1190 flat choices become 40 namespaced ones.\n\n**Oversized tags get split, not stuffed.** When the tool budget has headroom,\na giant tag is broken into focused sub-tools by path instead of one bloated\ntool. With more budget, GitHub's 202-operation `repos` tag splits cleanly:\n\n```\n$ mcp-curate curate examples/github.json --max-tools 120 --max-actions 30\n  - repos: ...            repos_branches, repos_commits, repos_collaborators,\n  - repos_branches: 36    repos_comments, repos_…","publisher":{"name":"tarundattagondi","url":null},"homepage":"https://github.com/tarundattagondi/mcp-curate","repository":"https://github.com/tarundattagondi/mcp-curate","version":"0.1.5","license":"MIT","protocols":["mcp"],"tags":["mcp","model-context-protocol","openapi","swagger","llm","anthropic","claude","tool-calling","cli","code-generation"],"pricing":null,"endpoints":[{"url":"pypi:mcp-curate","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","license":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[{"slug":"data.apis","name":"API Access","confidence":1,"provenance":"declared"},{"slug":"dev.version-control","name":"Version Control","confidence":0.779,"provenance":"derived"},{"slug":"code.generation","name":"Code Generation","confidence":0.75,"provenance":"derived"}],"categories":["code","data","dev"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"mcp-curate","registry":"pypi","observedAt":"2026-10-22T08:24:53.074Z","publishedAt":"2026-06-17T13:36:05.040155Z","latestVersion":"0.1.5"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mcp-curate","url":"https://pypi.org/project/mcp-curate/","firstSeenAt":"2026-09-10T01:19:46.938Z","fetchedAt":"2026-10-22T08:23:20.358Z","normalizedAt":"2026-10-22T08:23:20.358Z"}]},"firstSeenAt":"2026-09-10T01:19:46.938Z","updatedAt":"2026-10-22T08:24:53.074Z"}