MCPサーバー

VerifyMCP

io.verifymcp/mcp
MCP・エージェント基盤 セキュリティ 公開・接続可能 MCP 2025-11-25

このMCPでできること

Provides trust reports, diagnostics, tool inventories, malware findings, comparisons, alternatives, and installation configurations for MCP servers.

get_server
Get MCP server trust report
Get the full VerifyMCP trust report for one MCP server: score with per-category verdicts and reasons, the tools it exposes with their context-token cost, and its recent change history. Use before installing or trusting a server. Accepts a package name, endpoint URL, registry name or verifymcp slug.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifier': '@modelcontextprotocol/server-github'}, {'identifier': 'https://mcp.example.com/mcp'}, {'component': 'npm', 'identifier': 'io.github.acme/tools'}, {'identifier': 'acme-tools'}], 'required': ['identifier'], 'properties': {'component': {'type': 'string', 'description': 'Which channel to report on when a server ships several.'}, 'identifier': {'type': 'string', 'description': 'Package name, endpoint URL, registry name or verifymcp slug.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Canonical verifymcp.io page.'}, 'name': {'type': 'string', 'description': 'Display name.'}, 'slug': {'type': 'string', 'description': 'Stable verifymcp identifier.'}, 'type': {'type': 'string', 'description': 'Ecosystem: remote, npm, pypi, oci, nuget or mcpb.'}, 'score': {'type': ['integer', 'null'], 'description': 'Trust score 0-100; null when never scored.'}, 'tools': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'title', 'description', 'inputs', 'outputs', 'hasOutputSchema', 'hasExamples', 'tokenEstimate'], 'properties': {'name': {'type': 'string', 'description': 'Tool name.'}, 'title': {'type': ['string', 'null'], 'description': 'Human title, when distinct from name.'}, 'inputs': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'required', 'description'], 'properties': {'name': {'type': 'string', 'description': 'Parameter name.'}, 'type': {'type': ['string', 'null'], 'description': 'JSON scalar type, or null when unspecified.'}, 'required': {'type': 'boolean', 'description': 'Whether the tool requires this parameter.'}, 'description': {'type': ['string', 'null'], 'description': 'Parameter documentation, if any.'}}, 'additionalProperties': False}, 'description': 'Input parameters.'}, 'outputs': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'required', 'description'], 'properties': {'name': {'type': 'string', 'description': 'Parameter name.'}, 'type': {'type': ['string', 'null'], 'description': 'JSON scalar type, or null when unspecified.'}, 'required': {'type': 'boolean', 'description': 'Whether the tool requires this parameter.'}, 'description': {'type': ['string', 'null'], 'description': 'Parameter documentation, if any.'}}, 'additionalProperties': False}, 'description': 'Output schema fields.'}, 'description': {'type': ['string', 'null'], 'description': 'What the tool does.'}, 'hasExamples': {'type': 'boolean', 'description': 'Ships JSON-Schema examples.'}, 'tokenEstimate': {'type': 'integer', 'description': "Approximate context tokens this tool's definition costs."}, 'hasOutputSchema': {'type': 'boolean', 'description': 'Declares structured output.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'status': {'type': ['string', 'null'], 'description': 'Scoring status.'}, 'changes': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'kind', 'summary', 'materiality', 'direction', 'scoreDelta', 'occurredOn', 'url'], 'properties': {'id': {'type': 'string', 'description': 'Event identifier.'}, 'url': {'type': 'string', 'description': 'Deep link to the event.'}, 'kind': {'type': 'string', 'description': 'Machine-readable event kind, e.g. tool.removed.'}, 'summary': {'type': 'string', 'description': 'Plain-English description.'}, 'direction': {'enum': ['regression', 'improvement', 'neutral'], 'type': 'string', 'description': 'Whether this was a step back or forward.'}, 'occurredOn': {'type': 'string', 'description': 'UTC date observed.'}, 'scoreDelta': {'type': ['integer', 'null'], 'description': 'Score movement attributed to it.'}, 'materiality': {'enum': ['critical', 'security', 'functional', 'cosmetic'], 'type': 'string', 'description': 'How much this change matters.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'claimed': {'type': 'boolean', 'description': 'Owner has proved ownership.'}, 'malware': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['component', 'type', 'identifier', 'critical', 'severity', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical page for the affected channel.'}, 'type': {'type': 'string', 'description': 'Ecosystem of that channel.'}, 'critical': {'type': 'boolean', 'description': "The vendor's verdict was critical, which hard-zeroes the score."}, 'severity': {'type': ['string', 'null'], 'description': 'Vendor-reported severity for a non-critical finding; null when none was given.'}, 'component': {'type': 'string', 'description': 'The channel carrying the finding.'}, 'identifier': {'type': 'string', 'description': 'Package name or endpoint URL of that channel.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'liveness': {'type': 'string', 'description': 'Reachability: live, grace, degraded or dead.'}, 'products': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Product slugs this server is classified as working with. Empty means either classified to nothing or not yet classified; the two are indistinguishable, and classification covers hosted remote endpoints only.'}, 'component': {'type': 'string', 'description': 'Channel reported on.'}, 'deletedAt': {'type': ['string', 'null'], 'description': 'When the registry removed it.'}, 'matchedOn': {'enum': ['slug', 'registry_name', 'package', 'remote_url'], 'type': 'string', 'description': 'Which form of identifier matched.'}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'score', 'verdict', 'reasons'], 'properties': {'name': {'type': 'string', 'description': 'Category name.'}, 'score': {'type': ['integer', 'null'], 'description': 'Category score; null when pending.'}, 'reasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Plain-English findings.'}, 'verdict': {'enum': ['pass', 'partial', 'fail', 'unverified'], 'type': 'string', 'description': 'unverified means we could not determine it, NOT that it failed.'}}, 'additionalProperties': False}, 'description': 'Per-category breakdown in rubric order.'}, 'identifier': {'type': 'string', 'description': 'Package name or endpoint URL of this channel.'}, 'description': {'type': ['string', 'null'], 'description': 'Publisher summary.'}, 'inconclusive': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Checks we could not complete. Absence of evidence, not evidence of a problem.'}, 'lastScoredAt': {'type': ['string', 'null'], 'description': 'When this channel was last scored.'}, 'registryName': {'type': 'string', 'description': 'Reverse-DNS registry name.'}, 'statusMessage': {'type': ['string', 'null'], 'description': "The registry's stated reason for a deprecated or deleted status, quoted from the publisher. Null when none was given, which is always the case while active."}, 'registryStatus': {'type': 'string', 'description': 'active, deprecated or deleted.'}, 'siblingComponents': {'type': 'array', 'items': {'type': 'object', 'required': ['component', 'type', 'score', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical page.'}, 'type': {'type': 'string', 'description': 'Ecosystem.'}, 'score': {'type': ['integer', 'null'], 'description': "That channel's score."}, 'component': {'type': 'string', 'description': 'Channel slug.'}}, 'additionalProperties': False}, 'description': 'Other channels of the same server, which may score differently.'}, 'toolsTruncatedAtCapture': {'type': 'boolean', 'description': 'Our capture hit a size bound, so the tool list may be incomplete.'}}}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
get_server_alternatives
Find alternative MCP servers
Other MCP servers doing a similar job to a given one, with their trust scores. Neighbours share a product or publisher namespace; this is not a semantic search.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifier': '@modelcontextprotocol/server-github'}, {'identifier': 'https://mcp.example.com/mcp'}, {'identifier': 'acme-tools'}], 'required': ['identifier'], 'properties': {'identifier': {'type': 'string', 'description': 'Package name, endpoint URL, registry name or verifymcp slug.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'component', 'name', 'score', 'reason', 'status', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical verifymcp.io page.'}, 'name': {'type': 'string', 'description': 'Display name.'}, 'slug': {'type': 'string', 'description': 'Pass to get_server for the full report.'}, 'score': {'type': ['integer', 'null'], 'description': 'Trust score 0-100; null when unscored.'}, 'reason': {'type': 'string', 'description': 'Why it is a neighbour: a shared product, or a shared publisher namespace. Not an endorsement.'}, 'status': {'type': ['string', 'null'], 'description': 'deprecated, dead and so on; null for a healthy server.'}, 'component': {'type': ['string', 'null'], 'description': 'The channel url points at; null when it has none.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
get_server_comparison
Compare MCP servers
Compare up to 5 MCP servers side by side: trust scores, per-category breakdown, tool counts and context-token cost. Use when choosing between candidates that do the same job. Accepts package names, endpoint URLs, registry names or verifymcp slugs.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifiers': ['@acme/mcp-server', '@other/mcp-server']}, {'identifiers': ['acme-tools', 'beta-tools', 'gamma-tools']}], 'required': ['identifiers'], 'properties': {'identifiers': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 5, 'minItems': 2, 'description': 'Two to 5 servers to compare, as names, URLs or slugs.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['identifier', 'found', 'slug', 'name', 'score', 'status', 'channel', 'componentCount', 'toolCount', 'tokenFootprint', 'lastScoredAt', 'claimed', 'registryStatus', 'categories', 'url'], 'properties': {'url': {'type': ['string', 'null'], 'description': 'Canonical verifymcp.io page.'}, 'name': {'type': ['string', 'null'], 'description': 'Display name.'}, 'slug': {'type': ['string', 'null'], 'description': 'Resolved verifymcp identifier.'}, 'found': {'type': 'boolean', 'description': 'False when nothing matched; all other fields are then null.'}, 'score': {'type': ['integer', 'null'], 'description': 'Best trust score 0-100.'}, 'status': {'type': ['string', 'null'], 'description': 'Scoring status.'}, 'channel': {'type': ['string', 'null'], 'description': 'Best-scoring channel, e.g. remote or npm.'}, 'claimed': {'type': 'boolean', 'description': 'Owner has proved ownership.'}, 'toolCount': {'type': ['integer', 'null'], 'description': 'Tools advertised across remote channels.'}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'score', 'verdict', 'reasons'], 'properties': {'name': {'type': 'string', 'description': 'Category name.'}, 'score': {'type': ['integer', 'null'], 'description': 'Category score; null when pending.'}, 'reasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Plain-English findings.'}, 'verdict': {'enum': ['pass', 'partial', 'fail', 'unverified'], 'type': 'string', 'description': 'unverified means undetermined, NOT failed.'}}, 'additionalProperties': False}, 'description': 'Per-category comparison axes, from the best-scoring channel.'}, 'identifier': {'type': 'string', 'description': 'The identifier you supplied, echoed back.'}, 'lastScoredAt': {'type': ['string', 'null'], 'description': 'When the best channel was last scored.'}, 'componentCount': {'type': ['integer', 'null'], 'description': 'How many channels this server ships.'}, 'registryStatus': {'type': ['string', 'null'], 'description': 'active, deprecated or deleted.'}, 'tokenFootprint': {'type': ['integer', 'null'], 'description': 'Approximate context tokens all its tools cost.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
get_server_diagnostics
Get MCP server diagnostics
The evidence behind one server's score: TLS, DNSSEC, authorization, redirects, transports, provenance, install scripts, known CVEs and dependency health. Use to explain a low score.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifier': '@modelcontextprotocol/server-github'}, {'identifier': 'https://mcp.example.com/mcp'}, {'component': 'npm', 'identifier': 'io.github.acme/tools'}], 'required': ['identifier'], 'properties': {'component': {'type': 'string', 'description': 'Which channel to report on when a server ships several.'}, 'identifier': {'type': 'string', 'description': 'Package name, endpoint URL, registry name or verifymcp slug.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'component', 'capturedAt', 'track', 'endpoint', 'declaredUrl', 'captureTruncated', 'tls', 'dnssec', 'auth', 'redirect', 'transports', 'provenance', 'installScripts', 'vulnerabilities', 'dependencies', 'url'], 'properties': {'tls': {'type': ['object', 'null'], 'description': 'Handshake outcome, negotiated version, cipher and certificate chain summaries. Null when not captured.'}, 'url': {'type': 'string', 'description': 'Canonical verifymcp.io page.'}, 'auth': {'type': ['object', 'null'], 'description': 'Authorization posture: the gate, the challenge, and RFC 9728 metadata. Null when not captured.'}, 'slug': {'type': 'string', 'description': 'Stable verifymcp identifier.'}, 'track': {'type': ['string', 'null'], 'description': 'Which probe produced this: remote or package.'}, 'dnssec': {'type': ['object', 'null'], 'description': 'The DNSSEC validation walk, root to leaf. Null when not captured.'}, 'endpoint': {'type': ['string', 'null'], 'description': 'The URL actually probed, after any redirect.'}, 'redirect': {'type': ['object', 'null'], 'description': 'The plaintext http:// probe behind the HTTPS-enforcement check. Null when not captured.'}, 'component': {'type': 'string', 'description': 'Channel these diagnostics belong to.'}, 'capturedAt': {'type': ['string', 'null'], 'description': 'When the probe ran; null when never.'}, 'provenance': {'type': ['object', 'null'], 'description': 'Attestation and signing evidence for a published package. Null when not captured.'}, 'transports': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'description': 'One transport probe: which was offered and whether we could speak it.'}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'declaredUrl': {'type': ['string', 'null'], 'description': 'The registry-declared URL, when it differs from the one probed.'}, 'dependencies': {'type': ['object', 'null'], 'description': 'Dependency-tree counts. `partial` true means the tree did not fully resolve and counts undercount.'}, 'installScripts': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'description': 'A lifecycle hook found in the package manifest, with the review tier assigned to it.'}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'vulnerabilities': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'description': 'A known vulnerability affecting the dependency tree, with its CVE or advisory id.'}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'captureTruncated': {'type': 'boolean', 'description': 'The capture was trimmed to fit its storage bound, so sections may be missing.'}}}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
get_server_install_config
Get MCP server install config
Ready-to-paste install snippets for one MCP server, for every client we support. An MCPB bundle has no launch command, so it returns the download URL, the registry's SHA-256 and commands to verify the file instead. Read get_server first: this returns configuration, not a safety judgement.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifier': '@modelcontextprotocol/server-github'}, {'identifier': 'https://mcp.example.com/mcp'}, {'component': 'npm', 'identifier': 'acme-tools'}], 'required': ['identifier'], 'properties': {'component': {'type': 'string', 'description': 'Which channel to report on when a server ships several.'}, 'identifier': {'type': 'string', 'description': 'Package name, endpoint URL, registry name or verifymcp slug.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source', 'context', 'bundle'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['client', 'label', 'lang', 'comment', 'body', 'note'], 'properties': {'body': {'type': 'string', 'description': 'The snippet itself. Use verbatim; never re-escape it.'}, 'lang': {'enum': ['bash', 'json', 'toml', 'yaml'], 'type': 'string', 'description': 'Snippet language.'}, 'note': {'type': ['string', 'null'], 'description': 'Caveat for this client, where the syntax is a convention rather than a guarantee.'}, 'label': {'type': 'string', 'description': 'Client display name.'}, 'client': {'type': 'string', 'description': 'Client id, e.g. claude, cursor, vscode.'}, 'comment': {'type': 'string', 'description': 'Leading comment line, e.g. where the block goes.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'bundle': {'type': ['object', 'null'], 'required': ['url', 'sha256', 'fileName', 'verify'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Download URL of the .mcpb bundle.'}, 'sha256': {'type': ['string', 'null'], 'pattern': '^[0-9a-f]{64}$', 'description': 'Lowercase hex SHA-256 the registry declares for the file; null when it declares none, so there is nothing to verify against.'}, 'verify': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label', 'lang', 'body'], 'properties': {'id': {'type': 'string', 'description': 'shasum or powershell.'}, 'body': {'type': 'string', 'description': 'The command. Use verbatim.'}, 'lang': {'enum': ['bash', 'powershell'], 'type': 'string'}, 'label': {'type': 'string', 'description': 'Where the command runs.'}}, 'additionalProperties': False}, 'description': 'Commands that check the downloaded file against sha256. Empty when sha256 is null.'}, 'fileName': {'type': 'string', 'description': 'File name the verify commands expect the download to be saved as.'}}, 'description': 'MCPB bundles only (null otherwise): the file to download, the SHA-256 the registry declares for it, and commands that check the download against it. Open the verified file with an MCPB-capable host such as Claude Desktop.', 'additionalProperties': False}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'context': {'type': ['object', 'null'], 'required': ['score', 'status', 'verdict', 'malwareScan', 'claimed', 'publisherClass', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical page carrying the full report.'}, 'score': {'type': ['integer', 'null'], 'description': 'Trust score 0-100; null when never scored.'}, 'status': {'type': ['string', 'null'], 'description': 'Scoring status for this channel.'}, 'claimed': {'type': 'boolean', 'description': 'Owner has proved ownership of the listing.'}, 'verdict': {'enum': ['pass', 'partial', 'fail', 'unverified'], 'type': 'string', 'description': 'Worst category verdict. unverified means we could not determine it, NOT that it failed.'}, 'malwareScan': {'enum': ['confirmed', 'clean', 'not_scanned'], 'type': 'string', 'description': 'confirmed: a vendor flagged this server. clean: a vendor assessed it and found nothing. not_scanned: nobody assessed it, which is NOT an all-clear.'}, 'publisherClass': {'type': 'string', 'description': 'official, verified, third_party or unknown. unknown means no proof, not disproof.'}}, 'description': 'What we know about the server being installed. Present whenever a server resolved, including when no snippets could be built; null only when the identifier matched nothing.', 'additionalProperties': False}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
get_server_tools
List an MCP server's tools
Every tool one MCP server exposes, with its parameters, output schema and context-token cost. Use when get_server reported the tool list was truncated.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'identifier': '@modelcontextprotocol/server-github'}, {'identifier': 'https://mcp.example.com/mcp'}, {'component': 'npm', 'identifier': 'acme-tools'}], 'required': ['identifier'], 'properties': {'component': {'type': 'string', 'description': 'Which channel to report on when a server ships several.'}, 'identifier': {'type': 'string', 'description': 'Package name, endpoint URL, registry name or verifymcp slug.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'component', 'tokenFootprint', 'truncatedAtCapture', 'tools', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical verifymcp.io page.'}, 'slug': {'type': 'string', 'description': 'Stable verifymcp identifier.'}, 'tools': {'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice'], 'properties': {'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'title', 'description', 'inputs', 'outputs', 'hasOutputSchema', 'hasExamples', 'tokenEstimate'], 'properties': {'name': {'type': 'string', 'description': 'Tool name.'}, 'title': {'type': ['string', 'null'], 'description': 'Human title, when distinct from name.'}, 'inputs': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'required', 'description'], 'properties': {'name': {'type': 'string', 'description': 'Parameter name.'}, 'type': {'type': ['string', 'null'], 'description': 'JSON scalar type, or null when unspecified.'}, 'required': {'type': 'boolean', 'description': 'Whether the tool requires this parameter.'}, 'description': {'type': ['string', 'null'], 'description': 'Parameter documentation, if any.'}}, 'additionalProperties': False}, 'description': 'Input parameters.'}, 'outputs': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'required', 'description'], 'properties': {'name': {'type': 'string', 'description': 'Parameter name.'}, 'type': {'type': ['string', 'null'], 'description': 'JSON scalar type, or null when unspecified.'}, 'required': {'type': 'boolean', 'description': 'Whether the tool requires this parameter.'}, 'description': {'type': ['string', 'null'], 'description': 'Parameter documentation, if any.'}}, 'additionalProperties': False}, 'description': 'Output schema fields.'}, 'description': {'type': ['string', 'null'], 'description': 'What the tool does.'}, 'hasExamples': {'type': 'boolean', 'description': 'Ships JSON-Schema examples.'}, 'tokenEstimate': {'type': 'integer', 'description': "Approximate context tokens this tool's definition costs."}, 'hasOutputSchema': {'type': 'boolean', 'description': 'Declares structured output.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}, 'component': {'type': 'string', 'description': 'Channel these tools belong to.'}, 'tokenFootprint': {'type': 'integer', 'minimum': 0, 'description': 'Total estimated context tokens for every tool listed here.'}, 'truncatedAtCapture': {'type': 'boolean', 'description': 'The server itself truncated its tool list when we captured it, so it may expose more.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
list_known_malware
List known malware
List MCP server components carrying a supply-chain malware finding. Use to check whether anything in the register is flagged before installing.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{}, {'status': 'active'}, {'status': 'all'}], 'properties': {'status': {'enum': ['active', 'unverified', 'cleared', 'all'], 'type': 'string', 'default': 'active', 'description': 'Which findings to return: active, unverified, cleared or all. Defaults to active.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['serverSlug', 'serverName', 'component', 'registryType', 'packageIdentifier', 'versionChecked', 'state', 'critical', 'severity', 'llmOnly', 'code', 'vendor', 'firstFlaggedOn', 'flaggedOnOrBefore', 'lastConfirmedOn', 'clearedOn', 'lastCheckedOn', 'score', 'registryDeleted', 'url', 'vendorUrl'], 'properties': {'url': {'type': 'string', 'description': 'Canonical page carrying the full breakdown.'}, 'code': {'type': 'string', 'description': 'The reason code recorded for the finding.'}, 'score': {'type': ['integer', 'null'], 'description': "The component's trust score; null when never scored."}, 'state': {'enum': ['active', 'unverified', 'cleared'], 'type': 'string', 'description': 'active: still flagged. unverified: the finding was replaced by an inconclusive read. cleared: a later scan came back clean.'}, 'vendor': {'type': 'string', 'description': 'Which scanner answered.'}, 'llmOnly': {'type': 'boolean', 'description': "Every indicator is a model's suspicion with no signature match. Report it as suspicion, never as a detection."}, 'critical': {'type': 'boolean', 'description': "Vendor graded it critical, which floors the component's score to zero."}, 'severity': {'type': ['string', 'null'], 'description': 'Vendor severity; null when none was given.'}, 'clearedOn': {'type': ['string', 'null'], 'description': 'Cleared rows only: first clean day.'}, 'component': {'type': 'string', 'description': "The affected channel's slug."}, 'vendorUrl': {'type': ['string', 'null'], 'description': "The vendor's own report, when it indexes this ecosystem."}, 'serverName': {'type': 'string', 'description': 'Display name of the affected server.'}, 'serverSlug': {'type': 'string', 'description': 'Pass to get_server for the full report.'}, 'registryType': {'type': 'string', 'description': 'Ecosystem: npm, pypi or nuget.'}, 'lastCheckedOn': {'type': 'string', 'description': 'Newest day we hold any reading for this component.'}, 'firstFlaggedOn': {'type': 'string', 'description': 'UTC day OUR scan first recorded it. Not a vendor detection date; no vendor publishes one.'}, 'versionChecked': {'type': ['string', 'null'], 'description': 'Version the verdict pertained to; null when the scan recorded none.'}, 'lastConfirmedOn': {'type': 'string', 'description': 'Most recent UTC day a finding was confirmed.'}, 'registryDeleted': {'type': 'boolean', 'description': 'The registry has since dropped this server.'}, 'flaggedOnOrBefore': {'type': 'boolean', 'description': 'It was already present on the oldest reading we hold, so it began on or before that day.'}, 'packageIdentifier': {'type': 'string', 'description': 'The flagged package.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
list_products
List products
List the products MCP servers integrate with, such as github or notion, and how many servers cover each. Use to find the product slug that list_servers accepts.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{}, {'query': 'git'}, {'query': 'notion'}], 'properties': {'query': {'type': 'string', 'maxLength': 100, 'description': 'Name fragment to match against product names and slugs.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'tierA', 'serverCount', 'url'], 'properties': {'url': {'type': ['string', 'null'], 'description': 'Hub page, or null when the product has none.'}, 'name': {'type': 'string', 'description': 'Product display name.'}, 'slug': {'type': 'string', 'description': "The value to pass as list_servers' product filter."}, 'tierA': {'type': 'boolean', 'description': 'Has an editorial hub page on verifymcp.io.'}, 'serverCount': {'type': 'integer', 'minimum': 0, 'description': 'Listed servers classified under this product. A floor, not a census: see notice.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
list_servers
List MCP servers
Filter the VerifyMCP directory of scored MCP servers. Use to discover servers by name fragment, ecosystem, product or trust score. Name matching only: descriptions and capabilities are not searched, so a plain-English question matches nothing. Returns the first 100.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'examples': [{'query': 'github'}, {'product': 'github', 'minScore': 70}, {'sort': 'score_desc', 'types': ['remote'], 'minScore': 80}, {'types': ['npm', 'pypi'], 'scored': 'scored'}, {'query': 'postgres', 'types': ['npm']}], 'properties': {'sort': {'enum': ['score_desc', 'score_asc', 'name_asc', 'name_desc', 'channels_asc', 'channels_desc'], 'type': 'string', 'description': 'Default: best match (then trust) with a query, else trust. A given sort is applied exactly.'}, 'query': {'type': 'string', 'maxLength': 100, 'description': 'Name fragment to match against server and package names.'}, 'types': {'type': 'array', 'items': {'enum': ['remote', 'npm', 'pypi', 'oci', 'nuget', 'mcpb'], 'type': 'string'}, 'description': 'Restrict to these ecosystems; a server matches any one of them.'}, 'scored': {'enum': ['scored', 'unscored', 'all'], 'type': 'string', 'default': 'scored', 'description': 'Include unscored servers. Defaults to scored only.'}, 'product': {'type': 'string', 'description': 'Restrict to servers classified as working with this product, e.g. github.'}, 'maxScore': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Highest trust score to include.'}, 'minScore': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'Lowest trust score to include.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['items', 'count', 'total', 'truncated', 'notice', 'asOf', 'source'], 'properties': {'asOf': {'type': 'string', 'format': 'date-time', 'description': 'When this data was read (UTC).'}, 'count': {'type': 'integer', 'minimum': 0, 'description': 'Number of entries in items.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'registryName', 'description', 'score', 'status', 'weekDelta', 'componentTypes', 'products', 'liveness', 'registryStatus', 'claimed', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Canonical verifymcp.io page for this server.'}, 'name': {'type': 'string', 'description': 'Human-readable display name.'}, 'slug': {'type': 'string', 'description': 'Stable verifymcp identifier for this server.'}, 'score': {'type': ['integer', 'null'], 'description': 'Best trust score 0-100; null when unscored.'}, 'status': {'type': ['string', 'null'], 'description': 'Scoring status for the best component.'}, 'claimed': {'type': 'boolean', 'description': 'Owner has proved ownership of this listing.'}, 'liveness': {'type': 'string', 'description': 'Reachability: live, grace, degraded or dead.'}, 'products': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Product slugs this server is classified as working with. Empty means either classified to nothing or not yet classified; the two are indistinguishable.'}, 'weekDelta': {'type': ['integer', 'null'], 'description': 'Score movement over the last 7 days.'}, 'description': {'type': ['string', 'null'], 'description': 'Publisher-supplied summary.'}, 'registryName': {'type': 'string', 'description': 'Reverse-DNS registry name.'}, 'componentTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ecosystems this server ships in.'}, 'registryStatus': {'type': 'string', 'description': 'Registry lifecycle: active, deprecated or deleted.'}}, 'additionalProperties': False}, 'maxItems': 100}, 'total': {'type': 'integer', 'minimum': 0, 'description': 'Matches before the 100-item cap.'}, 'notice': {'type': ['string', 'null'], 'description': 'How to narrow a truncated result, or why an empty one is empty; null when neither applies.'}, 'source': {'type': 'string', 'format': 'uri', 'description': 'Canonical verifymcp.io page for this result.'}, 'truncated': {'type': 'boolean', 'description': 'True when total exceeds count.'}}, 'additionalProperties': False}
変更
get_server_install_config
2026年9月29日2:59
変更
list_servers
2026年9月27日2:50
追加
get_server_tools
2026年9月17日12:53
追加
get_server_install_config
2026年9月17日12:53
追加
get_server_diagnostics
2026年9月17日12:53
追加
get_server_alternatives
2026年9月17日12:53
追加
list_known_malware
2026年9月17日12:53
追加
list_products
2026年9月17日12:53
追加
get_server_comparison
2026年9月17日12:53
追加
get_server
2026年9月17日12:53
追加
list_servers
2026年9月17日12:53