ProvenPin
Server Details
Tested, version-pinned code recipes for AI coding agents, each with its last-passed receipt.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- provenpin/provenpin
- GitHub Stars
- 1
- Server Listing
- ProvenPin
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
The three tools have clearly distinct roles: search_recipes discovers recipes by query, list_stacks discovers supported libraries, and get_recipe retrieves the full detail for a known recipe id. Although search and get both mention compatibility, their boundaries are explicit and unlikely to be confused.
All three names follow a consistent snake_case verb_noun pattern: search_recipes, list_stacks, get_recipe. The convention is predictable and easy to infer.
Three tools are well-suited to a focused read-only recipe catalog: one for search, one for coverage discovery, and one for full detail retrieval. Each tool has a clear purpose and earns its place.
The surface covers the core workflow of finding, validating coverage for, and retrieving tested recipes with pinned versions and receipts. A minor gap is the lack of a direct browse/list-all-recipes operation, though search and list_stacks provide workable paths.
Available Tools
3 toolsget_recipeGet a recipeARead-onlyInspect
Call this right after search_recipes returns a matching recipe, before you write the integration code, so you start from files and versions that passed tests. Gets the full recipe by id (ids come from search_recipes): every source and test file (each with the sha256 of the exact bytes that were tested), the exact pinned dependency versions, the setup and test commands, its test receipt (when it last passed, test counts, runtime and runner), recipe.yaml as manifest so receipt.recipe_hash can be recomputed (recipe_hash_rule), and staleness: the latest weekly check of its stack libraries against their newest releases. Pass the project's lockfile or a {package: version} map as versions to get a compatibility section first, comparing each pinned package with the installed one (exact, compatible, mismatch, or not in your project) with plain warnings; test and build tools (pytest, tsx, @types/*) are listed under tooling and do not change overall. Use the pinned versions together; they are the versions the tests passed with. Adapt names and config to the user's project, and keep the included tests to check your integration.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| versions | No | Optional but recommended: the versions in the user's project, so results are checked against them. Either a map like {"next": "15.2.0", "zod": "3.23.8"} or the raw text of package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock or uv.lock (max 200KB). Used only for this call, never stored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly/openWorld=false, but the description adds substantial context: what the sha256 hashes cover, that staleness is a weekly check, that tooling packages are excluded from the overall compatibility verdict, and that the versions input is never stored. These are behaviors an agent could not infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical routing instruction is front-loaded in the first sentence, and nearly every clause carries new behavioral information. It is a single sprawling paragraph with some redundancy (the 'use the pinned versions' point is made twice) and would scan better with structure, but little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of describing return values and does so thoroughly: files, pinned deps, commands, test receipt, manifest/hash rule, staleness, and the optional compatibility section. Nothing an agent needs in order to invoke and interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and the description compensates for the undocumented id parameter by stating its provenance (comes from search_recipes). It also adds semantic depth to versions beyond the schema: the four compatibility categories, tooling exclusion, and why the pinned versions should be used together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Gets the full recipe by id') and enumerates exactly what the payload contains. It also distinguishes itself from the sibling by specifying that ids come from search_recipes and that this call follows that search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing: 'Call this right after search_recipes returns a matching recipe, before you write the integration code.' It names the alternative (search_recipes) and the condition that selects it, and adds a conditional usage path for the optional versions parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stacksList stacksARead-onlyInspect
Call this when the user names a library and you are not sure ProvenPin covers it, or after search_recipes returns nothing. Lists the libraries and frameworks that currently have passing, version-pinned recipes, with recipe counts; use the names as the stack filter in search_recipes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: the listing is restricted to stacks with passing, version-pinned recipes (i.e., not an exhaustive catalog), and it includes recipe counts. It does not discuss completeness limits or ordering, so it falls just short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the trigger condition, then the output content, then the follow-up action. No filler or restatement of the title; every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters and no output schema, so the description must carry the return-value burden — and it does, describing the returned entity (libraries/frameworks with passing recipes) and the accompanying recipe counts. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there is nothing to disambiguate and the baseline is 4. The description's remark about using result names as the stack filter applies to a sibling's parameter, which is helpful context but not a parameter of this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it 'lists the libraries and frameworks that currently have passing, version-pinned recipes, with recipe counts.' The qualifier 'passing, version-pinned' distinguishes its scope from a generic catalog, and it is clearly separable from search_recipes and get_recipe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit trigger conditions — when the user names a library and coverage is uncertain, and after search_recipes returns nothing — plus the downstream follow-up (use the returned names as the stack filter in search_recipes). This is when-to-use and how-to-continue in one place.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recipesSearch tested recipesARead-onlyInspect
Find a tested, version-pinned code recipe for wiring libraries together. Call this BEFORE writing glue code that combines 2+ libraries (auth + framework, ORM + database, payments webhooks, queues, validation, request mocking, logging), when choosing or pinning package versions, when upgrading a library to a new major version (for example SQLAlchemy 2 or Pydantic 2), and when you hit version conflicts, peer-dependency errors, deprecation errors or integration errors between libraries. Example queries: 'express stripe webhook', 'fastapi sqlmodel crud', 'hono jwt'. Only recipes whose latest test run passed are returned. Each result lists its exact pinned versions and a test receipt (receipt.last_passed_at). Pass the project's lockfile or a {package: version} map as versions: recipes that match the installed versions rank first and each result gets a compatibility summary. Each result's coverage (0 to 1) is the share of your query's words it matches. If no recipe fits, count is 0 and results is empty: write the code yourself; try list_stacks to see what is covered.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | What you are wiring together, in plain words or library names, e.g. 'django rest api' or 'rq redis jobs'. | |
| stack | No | Only recipes that use all of these libraries. | |
| language | No | ||
| versions | No | Optional but recommended: the versions in the user's project, so results are checked against them. Either a map like {"next": "15.2.0", "zod": "3.23.8"} or the raw text of package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock or uv.lock (max 200KB). Used only for this call, never stored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description goes further by disclosing that only recipes with a passing latest test run are returned, that results carry a test receipt and compatibility summary, and that the versions input is used only for this call and never stored. It does not mention result ordering beyond version-match ranking or any rate limits, so it stops short of the top of the range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose comes first, then triggers, then inputs, then return semantics and the failure case — a well-ordered funnel. It is dense and somewhat long, with mild redundancy around 'version-pinned'/'pinned versions' and the parenthetical library pairings, but nearly every clause adds usable routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract, and it does: each result's pinned versions, test receipt (receipt.last_passed_at), coverage as a 0-1 ratio, compatibility summary, and the empty-result shape (count 0). Combined with query examples and the fallback to list_stacks, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema coverage, the description meaningfully extends the versions parameter (lockfile or map, drives ranking and the per-result compatibility summary, never persisted) and explains stack filtering behavior plus the coverage score. The limit parameter goes undocumented in both schema and description, and language has only an enum, so a small gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Find a tested, version-pinned code recipe for wiring libraries together.' The scope (tested, version-pinned, cross-library wiring) is distinctive enough to separate it from get_recipe and list_stacks, and list_stacks is named explicitly as the coverage-lookup alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Call this BEFORE writing glue code that combines 2+ libraries') plus a concrete enumeration of situations: choosing/pinning versions, major upgrades, version/peer-dependency/deprecation/integration errors. It also states the exclusion path — if count is 0, write the code yourself and try list_stacks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
get_recipe1 field changed- added
Input schema / properties / versionsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Optional but recommended: the versions in the user's project, so results are checked against them. Either a map like {\"next\": \"15.2.0\", \"zod\": \"3.23.8\"} or the raw text of package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock or uv.lock (max 200KB). Used only for this call, never stored.", + "type": [ + "object", + "string" + ] +}
- Changed
search_recipes1 field changed- added
Input schema / properties / versionsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Optional but recommended: the versions in the user's project, so results are checked against them. Either a map like {\"next\": \"15.2.0\", \"zod\": \"3.23.8\"} or the raw text of package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock or uv.lock (max 200KB). Used only for this call, never stored.", + "type": [ + "object", + "string" + ] +}
3 tool updates
- First observed
get_recipe - First observed
list_stacks - First observed
search_recipes
Related MCP Connectors
Verified, version-pinned answers about fast-moving frameworks for coding agents.
Shared, tested playbooks (recipes) for AI agents. Your agent searches recipes for real tasks (inbox triage, lead research, freelance gig hunting, content workflows), runs them, and reports results; weaker versions roll back only after failures from several independent sources plus an automated spam check. Free, no install, no email needed: one remote MCP URL.
Practices for building software with coding agents, each with a test you check on your repo.
Catalog for building with AI agents: tools, APIs, licensed assets, prices and history, recipes.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceKeeps AI coding agents current on Zcash by serving dated, sourced facts, testnet-verified recipes, a stale-pattern and privacy lint, and live transaction status checks without ever touching keys or funds. Agents can also read the bundled llms.txt and follow a guided builder prompt so generated code works on today's NU7 testnet.MIT
- AlicenseNot gradedqualityAmaintenanceLocal code-citation checks, source-evidence grounding, and fail-closed review tools for AI coding agents.448 PyPI1Apache 2.0
- AlicenseBqualityAmaintenanceChecks AI agents' claims against primary evidence, with no model; observes only what you grant.8781 PyPIApache 2.0
- AlicenseNot gradedqualityBmaintenanceVerifiable GitHub handoffs between AI agents: receipts, read-back, no self-review. Every write is read back, acknowledgements are bound to the exact task version, and unsafe actions like self-review or a token in a comment are blocked.95 npmApache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.