{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_z2h2kbtnhx8j","handle":"mcp-posture","url":"https://wellknown.network/agents/mcp-posture","links":{"self":"https://wellknown.network/agents/mcp-posture/record.json","html":"https://wellknown.network/agents/mcp-posture","markdown":"https://wellknown.network/agents/mcp-posture/record.md","api":"https://wellknown.network/api/v1/agents/mcp-posture","status":"https://wellknown.network/api/v1/agents/mcp-posture/status","claim":"https://wellknown.network/agents/mcp-posture/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-posture/claim.json","badge":"https://wellknown.network/agents/mcp-posture/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-posture/history","tools":"https://wellknown.network/api/v1/agents/mcp-posture/tools"},"ard":{"identifier":"urn:air::server:mcp-posture","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp-posture","summary":"Security posture scanner for remote MCP servers: OAuth, transport and tool surface, with spec-cited findings and SARIF.","description":"# mcp-posture\n\n[![CI](https://github.com/batou9150/mcp-posture/actions/workflows/ci.yml/badge.svg)](https://github.com/batou9150/mcp-posture/actions/workflows/ci.yml)\n[![Action self-test](https://github.com/batou9150/mcp-posture/actions/workflows/action-selftest.yml/badge.svg)](https://github.com/batou9150/mcp-posture/actions/workflows/action-selftest.yml)\n[![PyPI](https://img.shields.io/pypi/v/mcp-posture.svg)](https://pypi.org/project/mcp-posture/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**Security posture scanner for remote MCP servers.** Point it at a Streamable HTTP endpoint and\nit audits the OAuth setup (MCP Authorization spec, RFC 9728, RFC 8414, PKCE, RFC 8707, Client ID\nMetadata Documents), transport hardening and the tool surface (poisoning, shadowing, rug pulls),\nwith spec-cited findings and CI-native output (SARIF, JSON, Markdown).\n\n> Only scan servers you own or are authorized to test.\n\n## Why\n\nMost MCP scanners inspect local client configs and stdio servers. `mcp-posture` focuses on\n**remote** servers and what an attacker sees from the outside before logging in: how the server\nchallenges, which authorization server it trusts, whether that server enforces PKCE S256, whether\ntokens are audience-bound, whether the tool descriptions hide instructions. Every finding cites the\nspec section and the MCP revision it applies to (`2025-03-26` through `2026-07-28`).\n\n## Quickstart\n\n```bash\n# no install needed (or: pipx install mcp-posture / uv tool install mcp-posture)\nuvx mcp-posture scan https://mcp.example.com/mcp\n\n# machine-readable outputs, fail the build on high or worse\nmcp-posture scan https://mcp.example.com/mcp --sarif results.sarif --markdown summary.md --fail-on high\n\n# lint your own client's Client ID Metadata Document\nmcp-posture cimd lint https://app.example.com/oauth/client.json\n\n# scan every remote server declared in your MCP clients (.mcp.json, Claude, VS Code, Cursor, Windsurf)\nmcp-posture discover\nmcp-pos…","publisher":{"name":"Baptiste PIRAULT","url":null},"homepage":"https://batou9150.github.io/mcp-posture/","repository":"https://github.com/batou9150/mcp-posture","version":"1.2.0","license":null,"protocols":["mcp"],"tags":["mcp","model-context-protocol","oauth","sarif","scanner","security"],"pricing":null,"endpoints":[{"url":"pypi:mcp-posture","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[{"slug":"security.scanning","name":"Security Scanning","confidence":1,"provenance":"declared"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"declared"}],"categories":["security"],"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-posture","registry":"pypi","observedAt":"2026-11-05T22:26:20.028Z","publishedAt":"2026-11-04T22:50:56.279710Z","latestVersion":"1.2.0"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mcp-posture","url":"https://pypi.org/project/mcp-posture/","firstSeenAt":"2026-10-06T13:23:17.012Z","fetchedAt":"2026-11-05T22:24:21.331Z","normalizedAt":"2026-11-05T22:24:21.331Z"}]},"firstSeenAt":"2026-10-06T13:23:17.012Z","updatedAt":"2026-11-05T22:26:20.028Z"}