Skip to content

feat(mcp): stdio demo subcommand + Glama Dockerfile (closes #593)#609

Merged
kaiweijw merged 1 commit intomainfrom
fix/issue-593-glama-mcp-server
May 4, 2026
Merged

feat(mcp): stdio demo subcommand + Glama Dockerfile (closes #593)#609
kaiweijw merged 1 commit intomainfrom
fix/issue-593-glama-mcp-server

Conversation

@kaiweijw
Copy link
Copy Markdown
Collaborator

@kaiweijw kaiweijw commented May 4, 2026

Summary

  • Adds nyxid mcp-demo — a stdio JSON-RPC subcommand exposing a curated, hardcoded tool surface (nyx_proxy_request, nyx_list_services, nyx_request_approval, nyx_exchange_identity). For directory-listing introspection (Glama). No DB, no auth, no shared state with the production /mcp HTTP transport.
  • Adds kaiweijw to glama.json maintainers so the Glama listing can be claimed.
  • Adds Dockerfile.glama (150 MB) that builds the binary and runs nyxid mcp-demo as ENTRYPOINT.

Why

Glama's scoring pipeline (per their bot comment on punkpeye/awesome-mcp-servers#5485) introspects a server's tools/list over stdio and grades it on tool-description quality (70%) + server coherence (30%). NyxID's production transport is OAuth-protected Streamable HTTP at /mcp with per-user dynamic tools — it can't be scored under that model. The demo subcommand is a parallel entry point built specifically to be introspectable by directory listings.

The 4 demo tools mirror NyxID's gateway positioning (proxy, discovery, approval, identity exchange) but are not wired to a backing service — tools/call returns a stub message pointing users at the real HTTP endpoint.

Verification

Local stdio:

$ printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' \
    | ./target/release/nyxid mcp-demo
{"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{}},"serverInfo":{"name":"nyxid","version":"0.4.0"}}}
{"jsonrpc":"2.0","id":2,"result":{"tools":[...4 tools...]}}

Docker:

$ docker build -f Dockerfile.glama -t nyxid-glama:demo .   # 150 MB
$ printf '...' | docker run --rm -i nyxid-glama:demo
initialize ok: nyxid v0.4.0
tools/list returned 4 tools: nyx_proxy_request, nyx_list_services, nyx_request_approval, nyx_exchange_identity

Stderr stays clean (tracing/dotenv are skipped in mcp-demo mode so JSON-RPC stream isn't corrupted).

Follow-up after merge

  1. Claim the Glama listing at https://glama.ai/mcp/servers/ChronoAIProject/NyxID (now possible since kaiweijw is on the maintainers list).
  2. Paste Dockerfile.glama content into Glama's admin Dockerfile page (Glama doesn't auto-read it from the repo).
  3. Trigger re-evaluation; verify tools/list introspection lands a score.
  4. Update punkpeye/awesome-mcp-servers#5485 entry to inline the badge in the README diff per @punkpeye's format.

Test plan

  • CI: cargo build, cargo test, cargo clippy, cargo fmt --check (pre-commit hooks already passed locally)
  • CI: frontend type-check + lint unchanged (no frontend changes in this PR)
  • Manual: nyxid mcp-demo responds to initialize, tools/list, ping, and unknown methods (-32601)
  • Manual: docker build -f Dockerfile.glama . succeeds and the resulting image speaks stdio MCP
  • After merge: listing claim succeeds on Glama, score badge renders

Glama's scoring pipeline introspects MCP servers over stdio JSON-RPC
and ranks them on tool description quality. NyxID's production /mcp
transport is OAuth-protected Streamable HTTP and exposes per-user
dynamic tools, so it can't be scored that way.

Add `nyxid mcp-demo` -- a parallel stdio entry point that returns a
curated, hardcoded tool surface (nyx_proxy_request, nyx_list_services,
nyx_request_approval, nyx_exchange_identity) reflecting NyxID's
gateway positioning. The subcommand dispatches before dotenv/tracing
init to keep the protocol stream clean. No DB, no auth, no shared
state with the production server.

Also adds glama.json maintainer entry for kaiweijw to unblock listing
claim, and a Glama-targeted Dockerfile (150 MB) that runs the demo
subcommand. Closes #593.
@kaiweijw kaiweijw merged commit d1d6c8a into main May 4, 2026
10 checks passed
@kaiweijw kaiweijw deleted the fix/issue-593-glama-mcp-server branch May 4, 2026 06:28
kaiweijw added a commit that referenced this pull request May 4, 2026
…ne crate

The `nyxid mcp-demo` subcommand introduced in PR #609 only existed for
Glama's directory listing, which now uses the dedicated `nyxid-mcp-demo`
binary from the new `mcp-demo` workspace crate. Removing the duplicate
keeps a single source of truth for the curated tool definitions and
shrinks the backend binary's argv surface.
nwnwnw413 pushed a commit to nwnwnw413/awesome-mcp-servers that referenced this pull request May 4, 2026
Inlines the score badge after the GitHub link, matching the format
@punkpeye specified in the triage comment and the depwire/depwire
reference entry above. Glama listing was claimed and evaluated upstream
(see ChronoAIProject/NyxID#609 for the maintainer claim and
Dockerfile.glama work).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant