Skip to main content
Glama
stellar-expert-mcp

stellar-expert-mcp

by Bran18

StellarExpert MCP

Model Context Protocol server for the StellarExpert Open API (v1.4.0). It exposes Directory, Asset Info, and Ledger helper endpoints as tools so Cursor, Claude, and other MCP hosts can query the same public data your product documents.

The Open API is public, unauthenticated, and CORS-enabled. This server only wraps documented Open API routes — not undocumented explorer UI endpoints.

Upstream: https://api.stellar.expert
Docs: https://stellar.expert/openapi
Data license on the Open API: MIT

Tools

Tool

Upstream

list_directory_entries

GET /explorer/directory

get_directory_entry

GET /explorer/directory/{address}

list_directory_tags

GET /explorer/directory/tags

list_blocked_domains

GET /explorer/directory/blocked-domains

check_blocked_domain

GET /explorer/directory/blocked-domains/{domain}

list_assets

GET /explorer/{network}/asset

get_asset_rating

GET /explorer/{network}/asset/{asset}/rating

list_asset_holders

GET /explorer/{network}/asset/{asset}/holders

get_asset_holder_rank

GET /explorer/{network}/asset/{asset}/position/{account}

get_asset_supply

GET /explorer/{network}/asset/{asset}/supply

ledger_sequence_from_timestamp

GET /explorer/{network}/ledger/sequence-from-timestamp

ledger_timestamp_from_sequence

GET /explorer/{network}/ledger/timestamp-from-sequence

Resource: stellar-expert://docs
Prompts: check-address-safety, lookup-asset

network is public or testnet (default public, or STELLAR_EXPERT_NETWORK).

Related MCP server: Polymarket MCP

Rate limits

StellarExpert may return HTTP 429. The MCP surfaces that as a tool error and asks the model to cache or batch queries. For heavy client usage, cache on your side.

Requests send User-Agent: stellar-expert-mcp/0.1.0.

Requirements

  • Node.js 20+

Install (from a clone)

npm install
npm run build

Local stdio (until published to npm)

Cursor — project .cursor/mcp.json or ~/.cursor/mcp.json:

{
  "mcpServers": {
    "stellar-expert": {
      "command": "npx",
      "args": ["tsx", "/ABS/PATH/TO/stellar-expert-mcp/src/stdio.ts"]
    }
  }
}

Or after npm run build:

{
  "mcpServers": {
    "stellar-expert": {
      "command": "node",
      "args": ["/ABS/PATH/TO/stellar-expert-mcp/dist/stdio.js"]
    }
  }
}

After npm publish

{
  "mcpServers": {
    "stellar-expert": {
      "command": "npx",
      "args": ["-y", "stellar-expert-mcp"]
    }
  }
}

Claude Desktop / Claude Code (stdio)

{
  "mcpServers": {
    "stellar-expert": {
      "command": "npx",
      "args": ["tsx", "/ABS/PATH/TO/stellar-expert-mcp/src/stdio.ts"]
    }
  }
}

MCP Inspector

npm run inspector

Equivalent: npx @modelcontextprotocol/inspector npx tsx src/stdio.ts

Remote HTTP (clients)

Same createServer() factory over Streamable HTTP at /mcp.

npm run start:http

Defaults: http://127.0.0.1:3000/mcp. Health: GET /health.

Env

Default

Purpose

PORT

3000

Listen port

HOST

127.0.0.1

Bind address. Use 0.0.0.0 behind a reverse proxy

ALLOWED_HOSTS

(none)

Comma-separated Hostnames when binding non-localhost

STELLAR_EXPERT_API_BASE

https://api.stellar.expert

API origin

STELLAR_EXPERT_NETWORK

public

Default network for asset/ledger tools

Cursor remote config:

{
  "mcpServers": {
    "stellar-expert": {
      "url": "https://YOUR_HOST/mcp"
    }
  }
}

Smoke test:

curl -s -X POST http://127.0.0.1:3000/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

This v1 ships a Node process (npm run start:http). Host it on Fly, a VM, or similar; do not bind 0.0.0.0 without ALLOWED_HOSTS / a proxy.

Publishing to npm

npm is deprecating 2FA-bypass granular access tokens for account/package management (already in effect) and for direct publish (targeted January 2027). This repo does not use a long-lived NPM_TOKEN. Releases go through trusted publishing (OIDC).

First publish (the package does not exist yet — trusted publishers can only be attached after it does).

npm login --auth-type=web only signs you in. It is not package-publish 2FA. npm now requires account 2FA (or a bypass-2FA token, which we are not using) for every new package. --auth-type=web on npm publish will not open a second browser prompt if you are already logged in.

  1. Enable 2FA on the npm account (not GitHub): Two-Factor Authentication — authenticator app, auth-and-writes.

  2. Then, from this repo, use the 6-digit npm code (refreshes every 30s):

npm publish --access public --otp=123456

npx stellar-expert-mcp returning 404 is expected until this first publish succeeds.

Then on npmjs.com → stellar-expert-mcp → Settings → Trusted Publisher:

  • Organization or user: Bran18

  • Repository: stellar-expert-mcp

  • Workflow filename: publish.yml

  • Allow npm publish (and/or npm stage publish)

Later versions: bump version in package.json, commit, tag, push:

git tag v0.1.1
git push origin v0.1.1

.github/workflows/publish.yml publishes from GitHub-hosted runners with id-token: write. No bypass-2FA token.

Provenance attestations require a public GitHub repo. This repository is private, so npm will publish without provenance until you change visibility.

Development

npm start          # stdio
npm run start:http
npm run typecheck
npm run verify     # live Open API + in-process MCP handler

Attribution

API data and schema: StellarExpert. This MCP is a DevRel wrapper around the public Open API; it is not a substitute for on-chain source of truth (Horizon / RPC). Asset ratings are technical activity scores, not investment advice.

Available Tools

12 tools
check_blocked_domainCheck blocked domainA

Check whether a domain (or its registrable parent) is on the StellarExpert blocked-domains list. Use before linking or recommending a Stellar-related URL.

NameRequiredDescriptionDefault
domainYesHostname to verify, case-insensitive, e.g. sub.example.com

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the check may include the registrable parent domain and names the blocked-domains list, but it does not describe the return value shape, read-only nature, or failure behavior.

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

Conciseness5/5

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

The description is two compact sentences with the core check stated first and usage guidance second. There is no wasted text.

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

Completeness4/5

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

For a simple one-parameter check with full schema coverage, the description gives enough context to select and call the tool. The main remaining gap is that it does not explicitly state the return value, though 'Check whether' implies a Boolean-style result.

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. The description adds meaningful semantics by saying the check applies to the domain or its registrable parent, which goes beyond the schema's hostname example.

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 description uses a specific verb and resource: it checks whether a domain is on the StellarExpert blocked-domains list. It also clarifies the important scope that the registrable parent may be checked. It does not explicitly name the sibling list_blocked_domains, but the singular check purpose is still clear.

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?

The description gives a clear usage condition: use it before linking or recommending a Stellar-related URL. It does not state when not to use it or point to alternatives such as listing all blocked domains, so it falls short of the highest level.

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

get_asset_holder_rankGet asset holder rankA

Get an account’s relative balance rank among holders of an asset (position and total holder count).

NameRequiredDescriptionDefault
assetYesAsset identifier: native XLM, or CODE-ISSUER (optionally with -1), e.g. USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
accountYesStellar account address (G followed by 55 base32 characters)
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. 'Get' plus the parenthetical return summary signals a safe read with a defined output shape, but it says nothing about behavior for accounts that hold none of the asset, whether the rank is 1-based, or how the default network is resolved.

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

Conciseness5/5

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

A single sentence that front-loads the operation and packs the scope and return summary in a parenthetical with zero wasted words.

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

Completeness4/5

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

For a 3-parameter read-only lookup with full schema coverage, the description covers purpose and return values adequately; no output schema exists, so the mention of position and total holder count is valuable. Minor gaps remain around edge cases like non-holders and network fallback.

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

Parameters3/5

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

Schema description coverage is 100%, so asset format (CODE-ISSUER), account pattern, and the network default are already fully documented in the schema. The description adds no parameter-level detail beyond that, which is the expected baseline.

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?

States a specific verb and resource (relative balance rank among holders of an asset) and clarifies the returned values (position and total holder count). This is clearly distinct from the sibling list_asset_holders, though the description never names that sibling to make the distinction explicit.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is for 'where does this account rank' rather than 'who holds this asset', but there is no explicit when-to-use, when-not-to-use, or named alternative. No prerequisites or conditions are stated.

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

get_asset_ratingGet asset ratingA

Fetch StellarExpert composite technical rating for one asset (age, trades, payments, trustlines, volume7d, interoperability, liquidity, average). Ledger-activity based; not financial advice.

NameRequiredDescriptionDefault
assetYesAsset identifier: native XLM, or CODE-ISSUER (optionally with -1), e.g. USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that the score is ledger-activity based (so it reflects on-chain behavior, not off-chain sentiment) and that it is not financial advice, but it says nothing about caching/staleness, rate limits, or what happens for an asset with no ledger activity.

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?

Two tight sentences, front-loaded with what is fetched, followed by the derivation caveat. The parenthetical metric list is information-dense but slightly crammed; no sentence is wasted.

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

Completeness4/5

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

For a 2-parameter read with no output schema, the enumeration of rating components effectively previews the return shape and the 'ledger-activity based' note frames the value. Remaining gaps (behavior for an asset with no activity, cross-network differences) are modest given the small surface area.

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

Parameters3/5

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

Schema description coverage is 100%, including the CODE-ISSUER format example and the network enum default, so the schema already does the work. The description adds no parameter-level detail beyond the metric list, which is the correct baseline of 3.

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 (Fetch) and a specific resource (StellarExpert composite technical rating for one asset), then enumerates the exact sub-metrics composing the rating. That enumeration makes it unmistakable against siblings like get_asset_supply, list_asset_holders, or get_directory_entry.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the description makes clear it returns a pre-computed aggregate rating for a single asset, so an agent can infer it should call this instead of assembling raw metrics itself. However, it never names when to prefer a sibling (e.g. get_asset_supply for raw supply data) and gives no exclusions or prerequisites.

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

get_asset_supplyGet asset supplyB

Return total issued supply for an asset as plain text (useful for aggregators and dashboards). Native XLM and CODE-ISSUER identifiers are accepted.

NameRequiredDescriptionDefault
assetYesAsset identifier: native XLM, or CODE-ISSUER (optionally with -1), e.g. USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose the return encoding ('as plain text'), which is genuinely useful beyond structured fields, but says nothing about read-only safety, error behavior for unknown assets, rate limits, or numeric precision of the returned supply.

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?

Two compact sentences with the core action front-loaded and no filler. The parenthetical use-case is the only arguably expendable clause, keeping it just below a 5.

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

Completeness3/5

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

For a two-parameter read with no annotations and no output schema, the definition covers the action, input formats, and output shape ('plain text'), but leaves failure modes and the exact response format (precision, rounding) unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already fully documented at the field level. The description's note about accepted identifier formats (native XLM, CODE-ISSUER) merely restates the schema rather than adding new meaning, so baseline 3 applies.

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?

States a specific verb and resource ('Return total issued supply for an asset'), which is unambiguous and clearly distinct from sibling tools like list_asset_holders and get_asset_rating. It does not explicitly name a sibling or contrast with one, so it stops short of a 5.

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

Usage Guidelines3/5

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

'Useful for aggregators and dashboards' hints at the consumption context, but there is no explicit when-to-use vs when-to-use-something-else guidance, no mention of exclusions, and no statement of prerequisites for an asset identifier that may not exist.

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

get_directory_entryGet Directory entryA

Look up one Stellar account in the Directory. Returns name, domain, and tags when listed. An empty object (or 404) means the account is not in the Directory — it may still exist on-chain.

NameRequiredDescriptionDefault
addressYesStellar account address (G followed by 55 base32 characters)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the return shape, that a miss can surface as either an empty object or a 404, and that a Directory miss doesn't imply the account doesn't exist on-chain. It doesn't mention whether a 404 raises an error in the client, auth needs, or rate limits.

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

Conciseness5/5

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

Three short sentences, front-loaded with purpose, then return shape, then the not-found caveat — the most decision-relevant nuance. Nothing is padded.

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

Completeness4/5

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

No output schema exists, and the description compensates by naming the returned fields and the two empty-result forms, which is enough for an agent to interpret a response. A slightly fuller field list or note on error-vs-empty convention would make it complete.

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

Parameters3/5

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

Schema coverage is 100% and the single 'address' parameter already documents the G+55 base32 format with a regex pattern. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

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?

States a specific verb ('Look up') and a precisely scoped resource ('one Stellar account in the Directory'), plus what the response contains (name, domain, tags). The singular 'one' implicitly contrasts with list_directory_entries, but no sibling is named, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is implied by the singular-account framing and the hint that a missing account 'may still exist on-chain' suggests a fallback path, but the description never explicitly says when to pick this over list_directory_entries or the blocked-domain tools.

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

ledger_sequence_from_timestampLedger sequence from timestampA

Resolve the ledger sequence whose close time is equal to or before the given timestamp (UNIX seconds or RFC 3339). Returns 404 if the time is before the first ledger or in the future.

NameRequiredDescriptionDefault
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.
timestampYesUNIX time (seconds) or RFC 3339 timestamp, e.g. 1642597270 or 2022-08-29T13:51:18Z

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does usefully disclose the resolution rule (floor: equal to or before) and the 404 error cases, which an agent could not infer from the schema, but it says nothing about return shape, auth requirements, or rate limits.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core operation and followed by the error contract. Nothing redundant or padded.

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

Completeness3/5

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

With no output schema, the description should say more about what a successful call returns (a bare sequence number, or a sequence plus close time?). It covers input interpretation and failure modes adequately but leaves the success payload underspecified.

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

Parameters3/5

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

Schema coverage is 100%, and the timestamp schema already documents both UNIX-seconds and RFC 3339 formats, so the description largely repeats structured data. The one added meaning is the rounding rule — the returned ledger closes at or before the given time, not the nearest one — which is a genuine clarification but belongs to function behavior rather than the parameter itself.

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?

States a specific verb and resource: "Resolve the ledger sequence whose close time is equal to or before the given timestamp." That cleanly separates it from sibling ledger_timestamp_from_sequence (the inverse operation), but the description never names or references that sibling, so differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

The use case (converting a wall-clock time into a ledger number) is implied by the phrasing, and the failure conditions (before first ledger, in the future) are spelled out. However, there is no explicit guidance on when to prefer this over ledger_timestamp_from_sequence or which network to pick when the two disagree.

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

ledger_timestamp_from_sequenceLedger timestamp from sequenceB

Resolve the close timestamp (UNIX + ISO date) for a given ledger sequence.

NameRequiredDescriptionDefault
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.
sequenceYesLedger sequence number

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does disclose the return content (UNIX + ISO date), which is useful, but says nothing about behavior for sequences beyond the current tip, error conditions, or the network-scoping implications.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the verb and output format come immediately. Nothing in it could be removed.

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

Completeness3/5

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

For a simple two-parameter read-only lookup with a fully documented schema and inline return description, this is roughly adequate. It leaves gaps around the inverse sibling, the meaning of the network parameter, and edge-case behavior, which matter for correct selection.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (sequence, network) are documented in the schema, including the default resolution for network. The description adds no parameter-level meaning beyond that, so baseline 3 applies.

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?

States a specific verb (resolve) plus the exact resource and output shape (close timestamp, UNIX + ISO date) for a ledger sequence. It does not differentiate from the sibling ledger_sequence_from_timestamp, which performs the inverse mapping and is the obvious source of confusion for an agent.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus ledger_sequence_from_timestamp, nor any precondition such as only valid for already-closed ledgers. The agent must infer the direction of the conversion from the name alone.

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

list_asset_holdersList asset holdersA

List accounts holding a non-zero balance of an asset, sorted by balance. Zero-balance trustlines are omitted. Horizon-style paging.

NameRequiredDescriptionDefault
assetYesAsset identifier: native XLM, or CODE-ISSUER (optionally with -1), e.g. USDC-GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN
limitNoPage size (1–200). Defaults to 10 on the API.
orderNoResults sort order
cursorNopaging_token from a previous page
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.

TDQS

A3.9/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden and does disclose behavior: sort ordering by balance, omission of zero-balance trustlines, and Horizon-style paging semantics. It does not mention auth, rate limits, or what a page response looks like, leaving gaps but covering the key traits.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the core action and scope, then filtering and paging details. No wasted wording.

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

Completeness4/5

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

For a 5-param list tool with no annotations and no output schema, the description covers scope, ordering, and paging shape well. It stops short of describing the returned record structure or pagination termination, which would fully close the loop.

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 baseline is 3; the description adds meaning by tying 'sorted by balance' to the order param and clarifying that paging is Horizon-style, which informs how cursor is used beyond the schema's 'paging_token from a previous page'.

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?

Specific verb+resource ('List accounts holding a non-zero balance of an asset') with scope qualifiers: sorted by balance, zero-balance omitted. It clearly separates itself from get_asset_supply and get_asset_holder_rank by describing a full holder listing, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

'Zero-balance trustlines are omitted' implies the data scope, but there is no explicit guidance on when to use this versus get_asset_holder_rank or list_assets, and no exclusions or prerequisites stated.

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

list_assetsList assetsA

List Stellar assets with on-chain stats and StellarExpert composite rating. Search by code, issuer, home domain, or stellar.toml metadata. Sort by rating (default), created, payments, trades, trustlines, volume, or volume7d. Use to find or rank assets; rating is technical (age, activity, liquidity, SEP metadata), not an investment recommendation.

NameRequiredDescriptionDefault
sortNoSort field. Defaults to rating.
limitNoPage size (1–200). Defaults to 10 on the API.
orderNoResults sort order
cursorNopaging_token from a previous page
searchNoSearch by asset code, issuer, home domain, or TOML metadata
networkNoStellar network. Defaults to STELLAR_EXPERT_NETWORK or public.

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden; it does disclose what is returned (stats + composite rating) and that rating is technical, not an investment recommendation. It omits anything about pagination limits beyond the schema, rate limits, or permissions, leaving real gaps for a no-annotation tool.

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?

Three front-loaded sentences with no filler, and the key capability (search fields, sorting, rating default) is stated early. Mild redundancy in re-listing sort options that the schema already enumerates.

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

Completeness4/5

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

With no output schema, the description usefully describes the return content (on-chain stats, composite rating) and the search dimensions. Paging behavior is only covered by the schema's cursor field, a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already fully documented and the baseline is 3. The description restates the sort fields and confirms default sorting, and adds a bit on what 'rating' means, but contributes little beyond the schema.

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?

Specific verb + resource ('List Stellar assets') plus what the result carries (on-chain stats and StellarExpert composite rating). It implicitly distinguishes itself from single-asset siblings like get_asset_rating and list_asset_holders by being a broad listing, but never names an alternative explicitly.

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?

'Use to find or rank assets' gives a clear usage context, and the sort/search sentence frames when ranking is appropriate. No explicit when-not or named sibling alternative, so it stops short of the top score.

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

list_blocked_domainsList blocked domainsA

List domains reported for fraudulent Stellar-related activity. Paginated Horizon-style response. Prefer check_blocked_domain for a single hostname.

NameRequiredDescriptionDefault
limitNoPage size (1–1000). Prefer a small limit for model context.
orderNoResults sort order
cursorNopaging_token from a previous page
searchNoCase-insensitive search by domain or substring (min 2 characters)

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose that the response is paginated and Horizon-style, which is useful behavioral context. It says nothing about authentication requirements, rate limits, whether the list is exhaustive or snapshot-based, or the fact that it is a safe read operation (only implied by "List").

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then response shape, then the alternative. Every sentence carries information and nothing is repeated from structured fields.

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

Completeness4/5

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

For a zero-required-parameter read-only list tool with full schema coverage and no output schema, the description supplies purpose, pagination model, and sibling routing, which is close to sufficient. It leaves the caller to infer whether the listing is filtered by any status and what fields each entry returns.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, order, cursor, and search are all documented in the schema itself, establishing a baseline of 3. The description's "Paginated Horizon-style response" adds only an indirect hint about cursor semantics and nothing about search or ordering behavior beyond what the schema states.

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 domains reported for fraudulent Stellar-related activity") with the subject matter scoped precisely. It also names the sibling check_blocked_domain, so an agent can distinguish this list-all tool from the single-hostname lookup without opening either 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?

"Prefer check_blocked_domain for a single hostname" gives an explicit alternative and the condition that selects it. It stops short of stating when this tool should not be used at all (e.g., no filtering by status or reporter), but the primary routing decision is covered.

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

list_directory_entriesList Directory entriesA

Search the StellarExpert curated Directory of well-known accounts. Filter by address list, tags (exchange, anchor, issuer, wallet, custodian, malicious, unsafe, personal, sdf, memo-required, airdrop, defi), or a search string (name/domain/address, min 5 chars). Use for reverse lookups, scam checks (tag malicious/unsafe), and labeling counterparties.

NameRequiredDescriptionDefault
tagNoFilter by Directory tags, e.g. malicious, unsafe, memo-required
limitNoPage size (1–200). Defaults to 10 on the API.
orderNoResults sort order
cursorNopaging_token from a previous page to continue
searchNoFull-text search by address, name, or domain (min 5 characters)
addressNoFilter by up to 50 account addresses

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It explains filter mechanics and the tag vocabulary but never states the operation is read-only/idempotent, nor describes pagination behavior, error cases, or result shape for what is a paged listing tool with a cursor parameter.

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

Conciseness5/5

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

Three sentences, purpose front-loaded, with filters and use cases packed in without filler. The long tag enumeration is dense but each item is actionable filtering vocabulary.

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

Completeness4/5

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

For a six-parameter, fully described, non-destructive listing tool with no output schema, this covers what an agent needs to select and invoke it. The main remaining gap is that it doesn't hint at what a Directory entry contains beyond name/domain/address and tags.

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 earns extra by enumerating the full tag vocabulary (exchange, anchor, issuer, wallet, custodian, malicious, unsafe, personal, sdf, memo-required, airdrop, defi) where the schema only offers three examples. It also clarifies that search spans name/domain/address, adding meaning beyond the schema's terser wording.

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?

States a specific verb and resource: search the StellarExpert curated Directory of well-known accounts. It clearly reads as a list/search tool versus the singular get_directory_entry sibling, though it never names siblings explicitly.

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 concrete use cases (reverse lookups, scam checks via malicious/unsafe tags, labeling counterparties), which is more than most. It stops short of explicit exclusions or naming get_directory_entry/list_directory_tags as alternatives when you already have an address or just want the tag vocabulary.

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

list_directory_tagsList Directory tagsA

List all Directory tag categories (name + description) used to classify well-known and reported accounts.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. 'List all' signals a full enumeration, implying an unfiltered, read-only catalog, but pagination, ordering, and size expectations are unstated.

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

Conciseness5/5

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

A single sentence that front-loads the verb and resource, with the only extra clause being the classifying-purpose detail. Nothing is wasted.

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

Completeness4/5

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

For a zero-parameter list tool with no output schema, the description adequately conveys what comes back (name + description per category). Only the return volume and ordering are left implicit, a minor gap for so simple a call.

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?

The tool takes zero parameters, so the baseline is 4. The description correctly implies the call is argument-free and adds the useful detail that each category's payload is name + description.

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?

States a specific verb+resource: 'List all Directory tag categories' with a clarifying parenthetical that they carry name and description. It also scopes them to classifying well-known and reported accounts, which helps distinguish from the generic list_directory_entries, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

The phrase 'used to classify well-known and reported accounts' implies a context of use, but the description never says when to pick this over list_directory_entries or get_directory_entry, and offers no exclusions or prerequisites.

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. 12 tool updatesv0.1.0
    • First observedcheck_blocked_domain
    • First observedget_asset_holder_rank
    • First observedget_asset_rating
    • First observedget_asset_supply
    • First observedget_directory_entry
    • First observedledger_sequence_from_timestamp
    • First observedledger_timestamp_from_sequence
    • First observedlist_asset_holders
    • First observedlist_assets
    • First observedlist_blocked_domains
    • First observedlist_directory_entries
    • First observedlist_directory_tags

TDQS

A3.7/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target clearly distinct resources: directory (tags/entries/single lookup), blocked domains (list/check), assets (list/rating/supply/holders/rank), and ledger-time conversions. Slight overlap exists between list_directory_entries and get_directory_entry, and between list_assets and get_asset_rating, but descriptions explicitly steer the agent toward the right tool (e.g. 'prefer check_blocked_domain for a single hostname').

Naming Consistency4/5

Almost all tools follow a verb_noun snake_case pattern (list_*, get_*, check_*), with clear parallelism between paired tools (list/check blocked domains, list/get directory entries). The two ledger tools deviate by using a noun-based construction (ledger_sequence_from_timestamp / ledger_timestamp_from_sequence), though they are internally consistent with each other.

Tool Count5/5

Twelve tools is well within a comfortable range and each maps to a distinct lookup operation in the StellarExpert data domain. No filler or redundant tools are apparent.

Completeness4/5

The surface covers directory lookup, blocked-domain checks, asset discovery/rating/supply/holders, and ledger-time conversion comprehensively for those subdomains. Gaps exist for other plausible StellarExpert data (e.g. trade/market history, payments, account operation listings), but agents can work around most of these via the existing asset and directory tools.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP hosts like Claude and Cursor to query Polymarket data via Falcon AI's external API, including market listings, order books, and trader stats.
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Exposes two MCP tools (discover and execute) that enable agents to query an OpenAPI schema via natural language and execute matched API operations.
    2
    -
  • A
    license
    B
    quality
    B
    maintenance
    Exposes 17 read-only tools from six XRPL-Utilities services so AI agents can access XRPL wallet analysis, signal feeds, macro telemetry, permissioned asset stacks, RWA tracking, and ETF flow data.
    41
    7,210 npm
    MIT