Skip to content

Add MCP server card and AI catalog for agent discovery - #2832

Open
kaankacar wants to merge 3 commits into
mainfrom
2555-agent-endpoint-discovery
Open

Add MCP server card and AI catalog for agent discovery#2832
kaankacar wants to merge 3 commits into
mainfrom
2555-agent-endpoint-discovery

Conversation

@kaankacar

@kaankacar kaankacar commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Closes #2555

What

  • Add static/.well-known/mcp/server-card.json. It describes the Stellar Raven MCP server at https://raven.stellar.org/mcp with the SEP-2127 v1 card schema.
  • Add static/.well-known/ai-catalog.json. It lists the server card, the agent-skills index, the api-catalog, and llms.txt.
  • Serve the catalog as application/ai-catalog+json. Set Access-Control-Allow-Origin: * on both files.

Why

Agents can now find the official MCP server from the docs domain. The current SEP-2127 draft recommends the AI Catalog path. The isitagentready scanner reads /.well-known/mcp/server-card.json. This PR covers both.

DNS-AID is out of scope. The reasons are in #2555.

Verification

  • Both JSON files parse.
  • The server card validates against the ext-server-card schema.json (ajv, JSON Schema 2020-12).
  • The card version matches Raven's runtime serverInfo (0.1.0). The endpoint matches the Raven README.
  • All catalog URLs except the new card return 200 on production today.

Verified on the PR preview

  • GET /.well-known/mcp/server-card.json: 200, application/mcp-server-card+json, the four CORS headers from the SEP-2127 discovery doc, ETag. Body matches the repo file.
  • OPTIONS on the card: 204.
  • GET /.well-known/ai-catalog.json: 200, application/ai-catalog+json, CORS.
  • isitagentready scan of the preview host: MCP Server Card pass, ARD pass, API Catalog pass, Agent Skills pass.
  • Note: the edge in front of the site replaces Cache-Control with no-cache. The nginx max-age=3600 value does not reach clients. This is the same for every file on the site today.

Closes #2555

- static/.well-known/mcp/server-card.json points agents to the
  Stellar Raven MCP server (SEP-2127 v1 card schema).
- static/.well-known/ai-catalog.json lists the card, the agent-skills
  index, the api-catalog, and llms.txt.
- nginx serves the catalog as application/ai-catalog+json and sets
  Access-Control-Allow-Origin: * on both files.

DNS-AID is out of scope. See the issue for the reasons.
Copilot AI balanced review requested due to automatic review settings September 8, 2026 11:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds agent-discovery metadata for Stellar Raven and related AI resources.

Changes:

  • Adds an MCP server card and AI Catalog.
  • Configures MIME types and CORS headers.
  • References existing agent, API, and documentation catalogs.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
static/.well-known/mcp/server-card.json Describes Raven’s MCP endpoint; runtime identity requires alignment.
static/.well-known/ai-catalog.json Catalogs Stellar AI resources.
nginx/nginx.conf Configures discovery responses; card media type and preflight handling are incomplete.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread nginx/nginx.conf
Comment on lines +55 to +57
location = /.well-known/mcp/server-card.json {
add_header 'Access-Control-Allow-Origin' '*' always;
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in ece49de. The card is now served as application/mcp-server-card+json. Both files get the CORS set from discovery.md (Allow-Origin, Allow-Methods, Allow-Headers, Expose-Headers), Cache-Control public max-age=3600, and a 204 answer to OPTIONS preflight. nginx sends an ETag for static files by default.

@@ -0,0 +1,18 @@
{
"$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
"name": "org.stellar/raven",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The card schema requires exactly one slash in name (pattern ^[a-zA-Z0-9.-]+/[a-zA-Z0-9._-]+$). Raven's runtime name stellar-raven-codemode does not fit that pattern, so the card cannot copy it. version matches the runtime (0.1.0). Aligning Raven's serverInfo.name to org.stellar/raven is a follow-up in the stellar-raven repo.

@github-actions github-actions Bot added the preview Preview builds for PRs by SDF employees. label Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

- Serve the MCP Server Card as application/mcp-server-card+json.
- Add the CORS headers, Cache-Control, and an OPTIONS preflight answer
  for both the card and the AI Catalog.
- Move the shared headers into nginx/includes/agent-discovery-headers.conf.
Copilot AI review requested due to automatic review settings September 8, 2026 11:26
@github-actions github-actions Bot removed the preview Preview builds for PRs by SDF employees. label Sep 8, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

static/.well-known/ai-catalog.json:6

  • This advertises a verifiable did:web identity, but did:web:developers.stellar.org resolves through /.well-known/did.json, and this PR/repository provides no such file; the nginx fallback will therefore return 404. Consumers that verify the catalog host will see a broken identity claim. Either publish the DID document in this PR or omit the identifier until it exists.

{
"identifier": "urn:air:stellar.org:skills:index",
"displayName": "Stellar Agent Skills index",
"type": "application/agent-skills+json",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not changed on purpose. The agent-skills discovery RFC says to serve /.well-known/agent-skills/index.json with application/json (cloudflare/agent-skills-discovery-rfc README, publishing checklist). The catalog type field names the artifact kind with the AI Catalog known type. developers.cloudflare.com does the same: catalog type application/agent-skills+json, index served as application/json.

@github-actions github-actions Bot added the preview Preview builds for PRs by SDF employees. label Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

developers.stellar.org publishes no /.well-known/did.json, so
did:web:developers.stellar.org cannot be resolved. The AI Catalog host
verification step resolves host.identifier as a DID and confirms the
hosting domain in the DID document, which fails today. host.identifier
is optional and displayName is the only required host member, so drop
the claim until a DID document exists.
Copilot AI review requested due to automatic review settings September 8, 2026 12:11
@github-actions github-actions Bot removed the preview Preview builds for PRs by SDF employees. label Sep 8, 2026
@kaankacar

Copy link
Copy Markdown
Contributor Author

🤖 Automated message from Kaan's Automated Triage Bot.

Verified against both specs. The preview serves each file with its declared media type, the four CORS headers, ETag, OPTIONS 204 and If-None-Match 304. I removed the did:web host identifier, because this domain serves no did.json.

Decision needed: #2555 left "do we run an official Stellar MCP server?" open. This card names stellar-experimental/stellar-raven as that server, and Raven's runtime name is still stellar-raven-codemode. Publish now, or after Raven is renamed? @kaankacar @ElliotFriend

@kaankacar kaankacar added the bot:needs-decision Bot needs a maintainer decision (listing, scope, policy) label Sep 8, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.

@github-actions github-actions Bot added the preview Preview builds for PRs by SDF employees. label Sep 8, 2026
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot:needs-decision Bot needs a maintainer decision (listing, scope, policy) preview Preview builds for PRs by SDF employees.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Agent endpoint discovery (MCP Server Card + DNS-AID)

2 participants