Skip to main content
Glama

TrustScoreAgent

Free, open reputation registry for AI microservices. Agents check trust scores before calling any service.

Status: Phase 1 (early). The API, scoring (Beta + EigenTrust), receipt verification, Merkle audit trail and MCP server are implemented and tested, but the public dataset is still small (seeded by a transparent probe of public APIs and x402 endpoints), and parts of the design (x402 payments, mandatory agent signatures) are Phase 2. We publish early and openly on purpose: the trust layer for the agentic economy should exist, be auditable, and be adoptable before it becomes critical. See the trust model in SECURITY.md.

What is this?

AI agents increasingly rely on paid microservices. TrustScoreAgent lets any agent:

  • Check the reputation of a service before calling it

  • Rate a service after calling it

  • Discover which services are reliable

No account needed. No API key. Identify services by URL, domain, or DID.

Related MCP server: AgentVeil Protocol

Quick start

# Check a service's trust score (any format works)
curl "https://api.trustscoreagent.com/v1/score?service=api.example.com"
curl "https://api.trustscoreagent.com/v1/score?service=https://api.example.com/v1/translate"

# Unknown services return a neutral score (0.5), no errors
curl "https://api.trustscoreagent.com/v1/score?service=never-seen-before.com"

# Rate a service after calling it
curl -X POST "https://api.trustscoreagent.com/v1/rate" \
  -H "Content-Type: application/json" \
  -H "X-Agent-DID: my-agent.example.com" \
  -d '{
    "service": "api.example.com",
    "metrics": {
      "status_code": 200,
      "latency_ms": 143,
      "schema_valid": true
    }
  }'

# List top-rated services
curl "https://api.trustscoreagent.com/v1/services?sort_by=score&min_ratings=10"

Local development

# Start PostgreSQL and Redis
docker compose up -d

# Run the API
dotnet run --project src/TrustScore.Api

# Run tests
dotnet test

# Swagger UI
open http://localhost:5000/swagger

Architecture

  • C# / .NET 8: ASP.NET Core Minimal API

  • PostgreSQL: Ratings and service scores

  • Redis: Score caching, rate limiting, nonce tracking

  • Beta Reputation System: Bayesian scoring (per-dimension: availability, latency, conformity)

  • EigenTrust: Anti-Sybil agent trust scoring

  • Merkle Tree: Audit log with inclusion and consistency proofs (RFC 6962 tree; each leaf commits to what the rating reported)

  • Ed25519 Receipt Verification: Cryptographic proof of service interaction

  • MCP Server: Integration with Claude, Cursor, and MCP-compatible agents

API Reference

Core (free, always)

Endpoint

Description

GET /v1/score?service=

Trust score for a service (0.5 neutral for unknown)

POST /v1/rate

Submit a rating after calling a service

GET /v1/services

List rated services (pagination, sorting, filtering)

GET /v1/agent/trust?did=

Check your agent's trust score

GET /v1/audit/root

Latest Merkle tree root

GET /v1/audit/proof/{id}

Inclusion proof for a rating, with the fields it commits to

GET /v1/audit/anchors

History of anchored roots

GET /v1/audit/consistency?from=&to=

Proof that a later root extends an earlier one

GET /v1/audit/anchors/{id}/ots

OpenTimestamps proof that the root is committed in Bitcoin

GET /v1/stats?days=

How much the registry is used (aggregate counts)

Premium (free for now, x402 micropayments later)

Endpoint

Description

GET /v1/score/history?service=

Daily aggregated score history

GET /v1/score/detailed?service=

Latency percentiles, quality distribution

POST /v1/scores/bulk

Up to 100 scores in one request

Service identification

All endpoints accept services in any format (they are normalized internally):

  • api.example.com (domain)

  • https://api.example.com/v1/translate (URL)

  • did:web:api.example.com (DID)

All three resolve to the same service.

MCP Server

TrustScoreAgent is available as an MCP server for Claude, Cursor, and other agents.

# Add to Claude Code
claude mcp add trustscoreagent -- npx -y @trustscoreagent/mcp-server

Before paying an x402 endpoint, check_reputation with the pay_to of the 402 you received says whether that payee is the one the registry has seen there. See docs/mcp.md for full setup instructions. Also listed on the official MCP Registry (io.github.trustscoreagent/mcp-server), npm, Smithery and Glama; each GitHub release attaches an .mcpb bundle for Claude Desktop.

x402 plugin

@trustscoreagent/x402 plugs into the x402 client SDK (@x402/core, used by @x402/fetch and @x402/axios). Before each payment it checks the payee against the one the registry saw on that endpoint and stops the payment on a mismatch, before anything is signed.

const guard = trustScoreGuard();
guard.attach(client, http);
const fetchWithPayment = wrapFetchWithPayment(guard.wrapFetch(fetch), http);

The score alone never blocks unless you set minScore, an unreachable registry never blocks unless you set failClosed, and rating after payment is opt-in (rate: true). It runs in your agent: requests never go through TrustScoreAgent. See x402-plugin/README.md.

Framework integrations

Drop-in tools for agent frameworks (no account or API key needed):

  • LangChain: from trustscoreagent_langchain import get_trustscoreagent_tools

  • CrewAI: from trustscoreagent_crewai import get_trustscoreagent_tools

Each exposes trustscore_check_reputation, trustscore_submit_rating, and trustscore_list_services. See integrations/.

Documentation

Contributing

Contributions are welcome: see CONTRIBUTING.md and our Code of Conduct. To report a vulnerability, follow SECURITY.md.

Project status & trust model

TrustScoreAgent is Phase 1 (early). What that means in practice:

  • Baseline data is real and auditable. Initial scores come from a transparent operated probe (did:web:trustscoreagent.com:probe) that measures the availability, latency and conformity of a curated list of public, free APIs, and of the x402 endpoints agents pay the most (picked daily from the public Bazaar catalog and probed without paying, see docs/x402-probe.md): real, Merkle-audited measurements, not fabricated numbers. For those x402 endpoints the score also says which payee address and price they ask for, and when either last changed. Community and receipt-verified ratings accumulate on top. (The earlier fictitious *.example.com seeds have been removed.)

  • Single operator. Neutrality currently rests on open-source scoring code and a verifiable Merkle audit trail, not on decentralization. Federation is a later phase.

  • Agent identity can be proven, but is not yet mandatory. Agents identified by a did:key sign each rating with their Ed25519 key (X-Agent-Signature), which binds the rating to the holder of that key. Unsigned ratings still count at half weight so existing clients keep working, which means a rating is only as attributable as its signature. Verified service receipts remain the strongest signal.

See SECURITY.md for the full trust model and how to report vulnerabilities.

License

Apache-2.0. See LICENSE.

Available Tools

3 tools
check_reputationA
Read-only

Check what other agents measured about a service before you call it, and especially before you pay for it or hand it anything you cannot take back. Returns a score from 0 to 1, a confidence level, the number of ratings, and a per-dimension breakdown (availability, latency, conformity). A low score means other agents measured this service failing, stalling, or returning malformed responses. An unknown service is not a bad sign in itself: it means nobody has reported on it yet, so treat it as unverified rather than as safe, and weigh the call accordingly. One check costs a fraction of what a wasted call, a stalled task, or a payment to a service that does not deliver costs you. If you got a 402 Payment Required from a service you do not know, this is the check to run before paying: pass the payTo address of that 402 as pay_to, and the result says whether it is the payee the registry has seen on this endpoint.

NameRequiredDescriptionDefault
pay_toNoOptional: the payTo address of the x402 Payment Required you received, to compare with the payee the registry has seen on this endpoint
service_didYesThe service to check. Accepts any format: URL (https://api.example.com), domain (api.example.com), or DID (did:web:api.example.com). All resolve to the same service.

Output Schema

NameRequiredDescription
x402NoFor a paid x402 endpoint the registry probes: the payment terms last seen and their stability
knownYesFalse when nobody has rated this service yet
scoreYes
serviceYesCanonical service id
providerNoFor an unknown endpoint whose domain has rated endpoints: the domain's aggregate, a hint about the operator, not a measurement of this endpoint
confidenceYes
dimensionsNo
last_ratedNo
trust_levelYes
pay_to_checkNoWhen pay_to was given: match (a payee the registry saw on this endpoint), mismatch (not one: stop and check before paying), rotating (the endpoint issues a new payee per request, so no comparison is possible), no_data (no payment terms recorded)
ratings_countYes
recent_incidentsNonull while incidents are not tracked
service_supports_receiptsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark this as a read-only, open-world call; the description goes well beyond that by explaining the 0–1 score, the confidence level, the per-dimension breakdown, how to interpret a low score, and the critical caveat that an unknown service means 'unverified' rather than 'safe'. That interpretation guidance is exactly what an agent needs and cannot get from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Reasonably long but front-loaded with purpose, returns, and interpretation in that order. The cost-framing sentence is persuasive rather than strictly definitional, but it does inform the agent's decision threshold, so it mostly earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only check with a full output schema, the description covers everything needed: what is returned, how to read each element, the unknown-service case, and the concrete 402 follow-up path. No gaps remain for correct invocation or interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real value: it explains the 402-driven workflow for pay_to (comparing the 402 payTo against the registry's observed payee) and confirms service_did format-agnostic resolution, which goes beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Check what other agents measured about a service') and immediately frames the decision it supports. It is clearly distinguishable from the write-side sibling submit_rating and the enumeration sibling list_services without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong triggering conditions: run it before calling an unfamiliar service, especially before paying or handing over anything irreversible, and specifically after a 402 Payment Required. It does not explicitly name when to skip it or cite the sibling tools as alternatives, so it falls short of the full when/when-not/alternatives bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_servicesA
Read-only

List services that have been rated, sorted by trust score, with their per-dimension breakdown. Use it to pick a service that others have already measured rather than gambling on an unknown one, or to find an alternative when the service you were going to use scores badly. Filter on min_score and min_ratings together: a high score backed by one rating is an opinion, the same score backed by many is evidence. Set x402 to true to list only the paid x402 endpoints whose payment terms (payee, price) the registry records. The result gives the total matching the filters; page through it with offset.

NameRequiredDescriptionDefault
x402Notrue: only paid x402 endpoints with recorded payment terms; false: only the others
limitNoNumber of results (default 20, max 100)
offsetNoNumber of results to skip, to page through the total (default 0)
sort_byNoSort field (default: score)
min_scoreNoMinimum trust score filter (0.0-1.0)
min_ratingsNoMinimum number of ratings filter

Output Schema

NameRequiredDescription
countYes
totalNo
offsetNo
servicesYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description still adds real behavior: results are ordered by trust score, include a per-dimension breakdown, return a total matching the filters, and are paged with offset. It stops short of noting auth needs, rate limits, or how many dimensions appear, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then usage, then filter semantics, then pagination – a logical progression where each sentence carries a distinct instruction. The 'opinion vs evidence' framing is slightly expansive but still earns its place as filter rationale.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description still supplies the total-count/paging behavior an agent needs. With six optional parameters and the filtering strategy explained, an agent has everything required to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining the min_score/min_ratings interplay (score without rating volume is an opinion) and the precise meaning of x402=true (paid endpoints whose payee/price terms the registry records). That is genuine semantic added value over the field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List services that have been rated'), plus the ordering ('sorted by trust score') and the payload shape ('per-dimension breakdown'). This clearly separates it from check_reputation (single-service lookup) and submit_rating (a write), so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names two use cases (pick an already-measured service; find an alternative when a candidate scores badly) and gives operational advice on combining min_score with min_ratings. It also states exactly when to set x402=true. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_ratingA

Report what actually happened after you called a service, using metrics you already have from the call: status code, latency, and whether the response matched the shape you expected. This is not a donation to a commons. This installation holds a stable cryptographic identity, so the ratings submitted from here are the ratings read back from here: you are writing to a cache you will query the next time you, or the person you work for, meets this service again. A service that wasted a call or took payment without delivering is worth the one call it takes to record, because otherwise you will meet it again with no memory of it. Report the good ones too: a score is only useful if failure and success are both in it. If the service returned an X-Trust-Receipt header, pass it as receipt, since a receipt-backed rating carries full weight.

NameRequiredDescriptionDefault
receiptNoJWT receipt from the service's X-Trust-Receipt header (optional)
latency_msYesResponse time in milliseconds (round sub-millisecond responses up to 1)
service_didYesThe service you called. URL, domain, or DID (e.g., api.example.com)
status_codeYesHTTP status code returned by the service (e.g., 200, 500)
schema_validNoWhether the response matched the expected format (optional)
quality_scoreNoSubjective quality rating from 1 (poor) to 5 (excellent) (optional)
response_size_bytesNoSize of the response in bytes (optional)

Output Schema

NameRequiredDescription
serviceYes
acceptedYes
new_scoreNo
rating_idNoPass to GET /v1/audit/proof/{rating_id} to verify the rating is in the audit log
rating_weightNoverified (valid receipt) or unverified
agent_identityNosigned or unsigned

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare this is a non-read-only, non-idempotent, open-world write; the description adds genuinely new context beyond them — that ratings persist under a stable installation identity and are read back on future encounters, and that receipt-backed ratings carry 'full weight.' It omits whether duplicate submissions overwrite prior ratings, which matters given idempotentHint=false, but the added context is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The instruction is front-loaded with the concrete action first, and the receipt rule lands last where it is actionable. Some middle sentences are persuasive rhetoric ('This is not a donation to a commons,' 'you will meet it again with no memory of it') that restates the same persistence point twice rather than adding operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the schema fully documents all seven parameters. For a write tool this rich, the description covers what to submit, when to submit it, and the receipt path, leaving nothing essential an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description meaningfully enriches several params: status_code/latency/schema_valid are framed as 'metrics you already have from the call,' and receipt is explained via its source header (X-Trust-Receipt) and its effect ('carries full weight'). It does not touch response_size_bytes or quality_score, so a small gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb ('Report') and resource (the outcome of a service call), and enumerates the exact data to supply: status code, latency, response-shape match. It implicitly distinguishes itself from check_reputation by framing submission as writing to the cache that is later read back. It never names a sibling outright, so it stops short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear triggering context ('after you called a service') and an explicit inclusion rule ('Report the good ones too: a score is only useful if failure and success are both in it'), plus a conditional instruction for the receipt header. It does not name an alternative tool or a when-not-to-use condition beyond refuting the 'donation to a commons' misconception.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.2.8
    • Changedlist_services4 fields changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Number of results to skip, to page through the total (default 0)",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / x402
        Added value: +{
        +  "description": "true: only paid x402 endpoints with recorded payment terms; false: only the others",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / offset
        Added value: +{
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / total
        Added value: +{
        +  "minimum": 0,
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
  2. 1 tool updatev0.2.6
    • Changedcheck_reputation4 fields changed
      • addedInput schema / properties / pay_to
        Added value: +{
        +  "description": "Optional: the payTo address of the x402 Payment Required you received, to compare with the payee the registry has seen on this endpoint",
        +  "type": "string"
        +}
      • addedOutput schema / properties / pay_to_check
        Added value: +{
        +  "description": "When pay_to was given: match (a payee the registry saw on this endpoint), mismatch (not one: stop and check before paying), rotating (the endpoint issues a new payee per request, so no comparison is possible), no_data (no payment terms recorded)",
        +  "enum": [
        +    "match",
        +    "mismatch",
        +    "rotating",
        +    "no_data",
        +    null
        +  ],
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / provider
        Added value: +{
        +  "description": "For an unknown endpoint whose domain has rated endpoints: the domain's aggregate, a hint about the operator, not a measurement of this endpoint",
        +  "properties": {
        +    "confidence": {
        +      "type": "number"
        +    },
        +    "endpoints_rated": {
        +      "type": "integer"
        +    },
        +    "last_rated": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "ratings_count": {
        +      "type": "integer"
        +    },
        +    "score": {
        +      "type": "number"
        +    },
        +    "service": {
        +      "type": "string"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / x402
        Added value: +{
        +  "description": "For a paid x402 endpoint the registry probes: the payment terms last seen and their stability",
        +  "properties": {
        +    "accepts": {
        +      "items": {
        +        "properties": {
        +          "amount": {
        +            "type": "string"
        +          },
        +          "asset": {
        +            "type": "string"
        +          },
        +          "network": {
        +            "type": "string"
        +          },
        +          "pay_to": {
        +            "type": "string"
        +          },
        +          "scheme": {
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "last_seen": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "observations": {
        +      "type": "integer"
        +    },
        +    "pay_to_changed_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "pay_to_changes": {
        +      "type": "integer"
        +    },
        +    "pay_to_rotates": {
        +      "type": "boolean"
        +    },
        +    "price_changed_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "price_changes": {
        +      "type": "integer"
        +    },
        +    "price_varies": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
  3. 3 tool updatesv0.2.4
    • Changedcheck_reputation1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "confidence": {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "dimensions": {
        +      "properties": {
        +        "availability": {
        +          "type": "number"
        +        },
        +        "conformity": {
        +          "type": "number"
        +        },
        +        "latency": {
        +          "type": "number"
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "known": {
        +      "description": "False when nobody has rated this service yet",
        +      "type": "boolean"
        +    },
        +    "last_rated": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "ratings_count": {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "recent_incidents": {
        +      "description": "null while incidents are not tracked",
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "score": {
        +      "maximum": 1,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "service": {
        +      "description": "Canonical service id",
        +      "type": "string"
        +    },
        +    "service_supports_receipts": {
        +      "type": "boolean"
        +    },
        +    "trust_level": {
        +      "enum": [
        +        "HIGH",
        +        "MODERATE",
        +        "LOW",
        +        "UNKNOWN"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "service",
        +    "known",
        +    "score",
        +    "trust_level",
        +    "confidence",
        +    "ratings_count"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_services1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "services": {
        +      "items": {
        +        "properties": {
        +          "confidence": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "dimensions": {
        +            "properties": {
        +              "availability": {
        +                "type": "number"
        +              },
        +              "conformity": {
        +                "type": "number"
        +              },
        +              "latency": {
        +                "type": "number"
        +              }
        +            },
        +            "type": [
        +              "object",
        +              "null"
        +            ]
        +          },
        +          "ratings_count": {
        +            "type": "integer"
        +          },
        +          "score": {
        +            "type": "number"
        +          },
        +          "service": {
        +            "type": "string"
        +          },
        +          "service_supports_receipts": {
        +            "type": "boolean"
        +          },
        +          "trust_level": {
        +            "enum": [
        +              "HIGH",
        +              "MODERATE",
        +              "LOW",
        +              "UNKNOWN"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "service",
        +          "score",
        +          "trust_level",
        +          "ratings_count"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "services"
        +  ],
        +  "type": "object"
        +}
    • Changedsubmit_rating1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "accepted": {
        +      "type": "boolean"
        +    },
        +    "agent_identity": {
        +      "description": "signed or unsigned",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "new_score": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "rating_id": {
        +      "description": "Pass to GET /v1/audit/proof/{rating_id} to verify the rating is in the audit log",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "rating_weight": {
        +      "description": "verified (valid receipt) or unverified",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "service": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "service",
        +    "accepted"
        +  ],
        +  "type": "object"
        +}
  4. 3 tool updatesv0.1.0
    • First observedcheck_reputation
    • First observedlist_services
    • First observedsubmit_rating

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct action: list_services for discovery and comparison across multiple services, check_reputation for vetting a single known service, and submit_rating for reporting outcomes. There is no overlap in intent, and the detailed descriptions clearly delineate when to use each.

Naming Consistency5/5

All three tools follow a consistent verb_noun snake_case pattern: list_services, check_reputation, submit_rating. The naming is predictable and immediately conveys the action and resource.

Tool Count5/5

Three tools are well-scoped and each earns its place in the reputation workflow: discover, check, and report. This falls within the typical 3-15 range for a focused server and avoids unnecessary bloat.

Completeness4/5

The core lifecycle of discovering services, checking reputation, and submitting ratings is covered. However, there is no way to update or delete a submitted rating, and no tool to retrieve raw individual ratings (only aggregates), which are minor gaps that agents can work around but limit full lifecycle coverage.

Maintenance

ActivityActive
ResponsivenessOutdated data

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    AI agent identity and reputation registry. Ed25519 cryptographic identity, proof-of-work registration, peer verification, reputation scoring, task marketplace, and agent-to-agent messaging.
    26
    1,246 npm
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides AI agents with trust scoring and reputation management capabilities for secure interactions. Enables agents to check trust scores, rate interactions, and manage disputes before transacting with other agents.
    -
  • F
    license
    A
    quality
    C
    maintenance
    Reputation and trust scoring service for AI agents, exposed as an MCP server. Evaluate counterparties, report interactions, issue portable trust certificates, and detect Sybil attacks.
    23
    40 PyPI
    -