{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_9myedbpghs7a","handle":"mcp-placard","url":"https://wellknown.network/agents/mcp-placard","links":{"self":"https://wellknown.network/agents/mcp-placard/record.json","html":"https://wellknown.network/agents/mcp-placard","markdown":"https://wellknown.network/agents/mcp-placard/record.md","api":"https://wellknown.network/api/v1/agents/mcp-placard","status":"https://wellknown.network/api/v1/agents/mcp-placard/status","claim":"https://wellknown.network/agents/mcp-placard/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-placard/claim.json","badge":"https://wellknown.network/agents/mcp-placard/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-placard/history","tools":"https://wellknown.network/api/v1/agents/mcp-placard/tools"},"ard":{"identifier":"urn:air::server:mcp-placard","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp-placard","summary":"Static analysis and drift detection for the surface an MCP server exposes to an agent.","description":"# Placard\n\n[![PyPI](https://img.shields.io/pypi/v/mcp-placard?label=PyPI)](https://pypi.org/project/mcp-placard/)\n[![Python](https://img.shields.io/pypi/pyversions/mcp-placard)](https://pypi.org/project/mcp-placard/)\n[![CI](https://github.com/Lanier-Developments/mcp-placard/actions/workflows/ci.yml/badge.svg)](https://github.com/Lanier-Developments/mcp-placard/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Never invokes a tool](https://img.shields.io/badge/tools%2Fcall-never-critical)](AGENTS.md#security-posture)\n\nStatic analysis and drift detection for the surface an MCP server exposes to an agent.\n\n```bash\npip install mcp-placard\nplacard scan \"npx -y @modelcontextprotocol/server-filesystem .\" --out baseline.json\n# ... a week later\nplacard scan \"npx -y @modelcontextprotocol/server-filesystem .\" --out current.json\nplacard diff baseline.json current.json     # exit 1 escalation, 2 prompt change, 3 removal\n```\n\nTeams wire agents to Model Context Protocol servers with no record of what capability they\njust granted, and no mechanism to notice when that capability changes. A server can add a\ndestructive tool, or silently rewrite a tool description — which is a prompt injected directly\ninto the agent's context — and nothing in the ecosystem today flags either event.\n\nPlacard connects to an MCP server, enumerates its surface, emits a canonical hashed\nmanifest, and fails CI when the next scan disagrees with the last one.\n\n**Placard never invokes a tool.** Enumeration and static analysis only. No code path may\ncall `tools/call`; `scripts/check_no_tool_invocation.py` enforces that mechanically.\n\n## Status: Phases 1 through 4 complete\n\n`scan` classifies every tool on the R0-R5 ladder — schema shape, tool name, description, and\ndeclared-annotation signals combine as a monotonic maximum (never a weighted score), reconciled\nagainst what the server declared about itself. Alongside the tier every tool carries a `kinds`\nse…","publisher":{"name":"Lanier Developments","url":null},"homepage":"https://github.com/Lanier-Developments/mcp-placard","repository":"https://github.com/Lanier-Developments/mcp-placard","version":"0.7.0","license":"MIT License\n        \n        Copyright (c) 2026 Lanier Developm…","protocols":["mcp"],"tags":["agents","mcp","security","static-analysis","supply-chain"],"pricing":null,"endpoints":[{"url":"pypi:mcp-placard","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":"code.security-review","name":"Security Review","confidence":1,"provenance":"derived"},{"slug":"dev.filesystem","name":"Filesystem","confidence":0.882,"provenance":"derived"}],"categories":["code","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-placard","registry":"pypi","observedAt":"2026-10-24T17:29:19.806Z","publishedAt":"2026-10-14T23:02:22.380580Z","latestVersion":"0.7.0"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mcp-placard","url":"https://pypi.org/project/mcp-placard/","firstSeenAt":"2026-09-18T08:26:37.559Z","fetchedAt":"2026-10-24T17:28:10.086Z","normalizedAt":"2026-10-24T17:28:10.086Z"}]},"firstSeenAt":"2026-09-18T08:26:37.559Z","updatedAt":"2026-10-24T17:29:19.806Z"}