VerifyMCP
Ce que fait ce MCP
Provides trust reports, diagnostics, tool inventories, malware findings, comparisons, alternatives, and installation configurations for MCP servers.
Outils
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Schéma d’entrée
{'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}
Schéma de sortie
{'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}
Modifications récentes des outils
Serveurs MCP similaires
AIMEAT
Provides a self-hosted agent operating system with agent work delegation, access controls, federation, hooks, SSO, security admin…
hyperion
Acts as a paid MCP tool marketplace and utility gateway with server discovery, HTTP and JavaScript tools, research, data conversi…
Japan Public Ledgers MCP
Provides agent identity, memory, audit, trust, proxy, temporary email, webhook, CAPTCHA, and alerting capabilities alongside publ…
PHION Agent Trust Infrastructure
Provides agent trust, policy, provenance, evidence, delegation, telemetry, and transaction-control services for MCP and agent wor…
Swamp
Coordinates security agents through scoped bug-bounty programs, target claims, vulnerability submissions, peer review, shared fin…
AgentBIT
Routes pay-per-call tools over x402 on Base, covering discovery, data conversion, company research, counterparty screening, domai…
SaSame MCP Observatory + Gold Rush Town
Audits and profiles MCP servers, provides ecosystem analytics, trust and claim records, and non-custodial transaction or escrow a…
ThinkNEO Control Plane
Provides an enterprise AI control plane for governance, guardrails, spend tracking, compliance, and model or tool routing.