The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the GRACE Hello MCP listing page.
A very simple remote MCP server (Streamable HTTP transport) that advertises a
custom icon per the MCP spec (rev 2025-11-25, SEP-973), ready to deploy on
Render.
It exposes one tool, say_hello, and serves a custom PNG icon that is advertised
in the initialize response's serverInfo.icons.
| File | Purpose |
|---|---|
server.js | The MCP server (Express + @modelcontextprotocol/sdk, Streamable HTTP). |
make_icon.py | Generates static/icon.png (stdlib only, no deps). Edit to change the icon. |
static/icon.png | The icon that gets advertised + served. |
render.yaml | Render blueprint for one-click deploy. |
http://localhost:3000/mcpQuick smoke test:
You should see serverInfo.icons in the response.
Or use the official MCP Inspector (renders the icon):
render.yaml
and creates a free Node web service. (Or New ➜ Web Service manually:
build npm install, start npm start.)RENDER_EXTERNAL_URL automatically, so server.js builds the
correct absolute https://<your-service>.onrender.com/icon.png icon URL — no
manual env vars needed.https://<your-service>.onrender.com/mcp.Note: Render's free plan sleeps on idle, so the first request after a while may take ~30s to wake.
Claude Code (CLI):
Then in a session: /mcp to see it, and ask Claude to "use say_hello to greet Rajith".
Claude Desktop / other GUI clients: add a remote/HTTP MCP server pointing at
https://<your-service>.onrender.com/mcp.
This server advertises its icon correctly per the MCP spec: the icons array
appears on serverInfo (and on the tool). It must be an https:// or data:
URI — we use the hosted https://.../icon.png.
Whether a client shows it is up to that client. Icon rendering is a newer, inconsistently-supported feature:
make_icon.py, then npm run make-icon
(regenerates static/icon.png). Or just drop your own 512×512 PNG at
static/icon.png.setRequestHandler cases / tool definitions in server.js.