{
  "markdown": "# GRACE Hello MCP\n\nA very simple **remote MCP server** (Streamable HTTP transport) that advertises a\n**custom icon** per the MCP spec (rev `2025-11-25`, SEP-973), ready to deploy on\n[Render](https://render.com).\n\nIt exposes one tool, `say_hello`, and serves a custom PNG icon that is advertised\nin the `initialize` response's `serverInfo.icons`.\n\n## Project layout\n\n| File | Purpose |\n|------|---------|\n| `server.js` | The MCP server (Express + `@modelcontextprotocol/sdk`, Streamable HTTP). |\n| `make_icon.py` | Generates `static/icon.png` (stdlib only, no deps). Edit to change the icon. |\n| `static/icon.png` | The icon that gets advertised + served. |\n| `render.yaml` | Render blueprint for one-click deploy. |\n\n## Run locally\n\n```bash\nnpm install\nnpm start            # serves on http://localhost:3000\n```\n\n- Landing/health page (shows the icon): http://localhost:3000/\n- MCP endpoint: `http://localhost:3000/mcp`\n- Icon: http://localhost:3000/icon.png\n\nQuick smoke test:\n\n```bash\ncurl -s -X POST http://localhost:3000/mcp \\\n  -H 'Content-Type: application/json' \\\n  -H 'Accept: application/json, text/event-stream' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-11-25\",\"capabilities\":{},\"clientInfo\":{\"name\":\"curl\",\"version\":\"0\"}}}'\n```\n\nYou should see `serverInfo.icons` in the response.\n\nOr use the official **MCP Inspector** (renders the icon):\n\n```bash\nnpx @modelcontextprotocol/inspector\n# then connect to http://localhost:3000/mcp  (Streamable HTTP)\n```\n\n## Deploy on Render\n\n1. Push this folder to a GitHub repo.\n2. In Render: **New ➜ Blueprint**, point it at the repo. It reads `render.yaml`\n   and creates a free Node web service. (Or **New ➜ Web Service** manually:\n   build `npm install`, start `npm start`.)\n3. Render injects `RENDER_EXTERNAL_URL` automatically, so `server.js` builds the\n   correct absolute `https://<your-service>.onrender.com/icon.png` icon URL — no\n   manual env vars needed.\n4. Your MCP endpoint is `https://<your-service>.onrender.com/mcp`.\n\n> Note: Render's free plan sleeps on idle, so the first request after a while\n> may take ~30s to wake.\n\n## Add it to an MCP client\n\n**Claude Code (CLI):**\n\n```bash\nclaude mcp add --transport http grace-hello https://<your-service>.onrender.com/mcp\n```\n\nThen in a session: `/mcp` to see it, and ask Claude to \"use say_hello to greet Rajith\".\n\n**Claude Desktop / other GUI clients:** add a remote/HTTP MCP server pointing at\n`https://<your-service>.onrender.com/mcp`.\n\n## About the icon (read this)\n\nThis server advertises its icon **correctly per the MCP spec**: the `icons` array\nappears on `serverInfo` (and on the tool). It must be an `https://` or `data:`\nURI — we use the hosted `https://.../icon.png`.\n\n**Whether a client shows it is up to that client.** Icon rendering is a newer,\ninconsistently-supported feature:\n\n- ✅ **MCP Inspector** and other spec-aware clients read and display it.\n- ⚠️ **Claude Code / Claude Desktop** currently still show their default\n  placeholder for arbitrary third-party servers — the branded icons in Claude's\n  marketplace are first-party integrations configured on Anthropic's side. As\n  client icon support matures, this server is already compliant and will \"just\n  work\" with no changes.\n\n## Customize\n\n- **Icon:** edit colors/shapes in `make_icon.py`, then `npm run make-icon`\n  (regenerates `static/icon.png`). Or just drop your own 512×512 PNG at\n  `static/icon.png`.\n- **Tools:** add more `setRequestHandler` cases / tool definitions in `server.js`.\n",
  "bytes": 3520,
  "sha": "526d48f085b64ff95cdb64a089e71eb1cb50cbf61af1417f1ed1d44905007bc1",
  "repo_slug": "rajitharul/grace-hello-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rajitharul_grace_hello_mcp_a3161f0f/readme"
}