About manifestlens
manifestlens is a client for the Agent Manifest Protocol, aimed at agents and API operators. It discovers and validates API manifests, checks whether an operation is permitted, and supports public registry submissions and status checks.
Key features
- 01Discover manifests at well-known paths
- 02Validate manifest structure
- 03Check operation permissions
- 04Submit APIs to the AMP registry
- 05Check submission status
Use cases
- 01Finding an API's published manifest
- 02Checking a planned API call against its manifest
- 03Validating a manifest before publication
- 04Submitting an API and tracking its registry status
MCP support
Exposes Agent Manifest Protocol discovery, validation, permission-checking, and registry operations as tools for MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
5Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain | string | Yes | Domain this call applies to. |
Details
From the project READMEmanifestlens
APIs that want to be usable by agents publish an Agent Manifest: a small JSON document that says what the API is, which endpoints an agent may call, and what constraints apply. manifestlens is a client for that Agent Manifest Protocol. It finds a manifest at an origin's well-known locations, checks a manifest's shape, files an origin with the public AMP registry and follows the submission, and — the part worth doing before every call — answers whether an intended operation is actually permitted by the manifest you are holding.
No API key is involved anywhere. The manifest probes and the registry are both public; the two local tools never leave the machine.
Configuration
AMP_REGISTRY_BASE_URL(optional) — base URL for the registry tools. Defaults tohttps://api.agent-manifest.com.AMP_FETCH_TIMEOUT_MS(optional) — timeout applied to manifest fetches. Defaults to15000.
Tools
fetch_manifest_by_domain— given adomain(a bare host, or a URL whose scheme and path are stripped), it requests/.well-known/agent-manifest.json,/.well-known/amp.json, and/agent-manifest.jsonunderhttps://<host>, in that order, and returns the first manifest that answers, together with the winningmanifest_url, theorigin, and thetried_urlslist. When nothing answers, it fails withno AMP manifest found for <host> (tried 3 URLs).validate_manifest_syntax— checks a manifest given as an object or as a JSON string. It applies the structural subset of the AMP schema described below and either returnsvalid: truewith a success token of the formamp-schema-valid:<spec_version>:<name>, orvalid: falsewith a list of path/message errors. A string that does not parse as JSON is a validation failure, not a tool error.submit_api_to_amp_registry— posts adomain's origin to the registry's submission endpoint (POST /listings/submit) and returns the registry's JSON reply unchanged.check_amp_submission_status— pollsGET /listings/submit/<submission_id>/statusand returns the registry's JSON reply unchanged.check_agent_permissions— takes anactionsuch asPOST /baking/validate-mix, amanifest, and the optional booleansintends_unauthenticatedandpayment_onboarded(both default false). It replies with averdict—compliant,violation,warning, orunknown— plus structuredfindings, and thematched_endpointwhen a declared route matched. Finding codes includeendpoint_not_declared(no declared route matches the action),auth_required(the route needs authentication but the action intends to run unauthenticated),payment_onboarding(the route or manifest declares payment terms and onboarding is not complete), andagent_notes_usage_restriction(the manifest'sagent_notescontain restriction language such as "do not" or "only for"). Declared routes may use{id}-style template segments, which match any single path segment.
Registry failures share two shapes: a non-2xx reply fails
with amp registry error: HTTP <status>, and an
unreachable registry with amp registry unreachable.
Argument validation fails before any request with
domain must be a non-empty string,
manifest must be an object or a JSON string,
submission_id must be a non-empty string,
action must be a non-empty string, or
manifest must be an object, as applicable.
What is a subset, and what is a reconstruction
Three parts of this build are deliberately labelled, here and in the code:
- Validation subset. The full official AMP JSON
Schema is not in the readable record, so validation
implements its documented structural subset: the value
must be a JSON object,
spec_versionmust beagentmanifest-0.2oragentmanifest-0.3,namemust be a non-empty string, and a presentendpointsmust be an array of objects each carrying a stringpath,url, orroute. - Submit input and body. The original tool's submit
input is not shown in its README; manifestlens takes
{domain}and posts{"origin": "https://<host>"}, a reconstruction. - Permission-rule mechanics. The verdicts and
finding codes above are documented; the exact matching
and precedence mechanics that produce them are a
reconstruction. Two finding codes are local extensions:
unparseable_action(the action does not start with an HTTP method) andno_endpoints_declared(the manifest carries no readable endpoints at all) — both come with verdictunknown.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/manifestlens fetch_manifest_by_domain '{"domain":"api.example.com"}'
npx @reneturcios/manifestlens validate_manifest_syntax '{"manifest":{"spec_version":"agentmanifest-0.3","name":"My API"}}'
npx @reneturcios/manifestlens submit_api_to_amp_registry '{"domain":"api.example.com"}'
npx @reneturcios/manifestlens check_amp_submission_status '{"submission_id":"sub_123"}'
npx @reneturcios/manifestlens check_agent_permissions '{"action":"POST /baking/validate-mix","manifest":{"endpoints":[{"method":"POST","path":"/baking/validate-mix"}]}}'
npx @reneturcios/manifestlens --version
Output is the tool's result text. Exit codes: 0 on
success, 1 on a runtime error (including a validation
or upstream failure), 2 on a usage error.
MCP server
npx -y @reneturcios/manifestlens mcp
MCP client config:
{
"mcpServers": {
"manifestlens": {
"command": "npx",
"args": ["-y", "@reneturcios/manifestlens", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/manifestlens
docker run --rm ghcr.io/cloudcorprecords/manifestlens fetch_manifest_by_domain '{"domain":"api.example.com"}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.