{
  "markdown": "# closedrings-mcp\n\n**Marketplace artifacts for connecting MCP-capable AI agents to\n[Closed Rings](https://closedrings.sh).**\n\nThere's no software in this repo — the MCP server is hosted on\nthe main app at `api.closedrings.sh/mcp`. What lives here is the\nplumbing for one-click discovery + one-click connect across the\nagent ecosystem:\n\n- **The skill** — `skill/SKILL.md`, the `closedrings:track-time`\n  playbook agents read to know *when* to call which tool.\n- **Marketplace manifests** — listings for Claude Desktop's\n  connector directory, Claude Code's plugin install path, the\n  Cursor MCP marketplace.\n- **Branding assets** — logo + screenshots used in each listing.\n\nWhen you finish a \"connect Closed Rings\" flow in any of those\nclients, the auth handshake is **the MCP-spec OAuth 2.0 flow** —\nthe client opens a browser to `closedrings.sh/oauth/authorize`,\nyou sign in (if not already), see a consent screen, and click\nApprove. No token paste, no JSON editing.\n\n---\n\n## Status\n\n🚧 **Pre-release** — server-side OAuth has landed\n([PR #98](https://github.com/samacs/closedrings.sh/pull/98));\nremaining gates for v0.1.0 are the production deploy and the\nClaude Desktop screenshot captures. Manifests are ready to ship:\n\n| Marketplace | Status | Submit when |\n|---|---|---|\n| **Claude Code** (this repo's root `.claude-plugin/marketplace.json`) | Marketplace live, install verified | Production has the OAuth endpoints |\n| **Claude Desktop** ([`manifests/claude-desktop/`](manifests/claude-desktop/)) | Manifest, cover letter, icons committed; screenshots + wordmark pending | Production has the OAuth endpoints + assets are captured |\n| Cursor       | Not started | After Claude Desktop is in review |\n\nUntil production deploys, follow the manual setup at\n[closedrings.sh/docs/mcp/overview](https://closedrings.sh/docs/mcp/overview).\n\n## Install in Claude Code\n\nThis repo IS a Claude Code plugin marketplace — install with one\ncommand from a Claude Code session:\n\n```sh\nclaude plugin marketplace add samacs/closedrings-mcp\nclaude plugin install closedrings@closedrings\n```\n\nThat registers the remote MCP server at `https://api.closedrings.sh/mcp`\nand the `closedrings:track-time` skill. Your first tool call kicks\noff the OAuth flow — Claude Code reads the `WWW-Authenticate`\nheader on the 401, walks discovery, registers itself via DCR,\nopens the browser for consent, and exchanges the code for a token.\n\nPlugin layout follows Claude Code's conventions:\n\n```\n.claude-plugin/marketplace.json           ← marketplace catalog\nplugins/closedrings/\n├── .claude-plugin/plugin.json            ← plugin manifest (mcpServers + metadata)\n└── skills/closedrings-track-time/\n    └── SKILL.md                          ← auto-invoked when the user mentions time tracking\n```\n\nSee [`manifests/claude-code/README.md`](manifests/claude-code/README.md)\nfor the iteration workflow + verification commands.\n\n## What this is *not*\n\nA common misconception worth flagging up front, because I had it\nmyself when I started this repo:\n\n- **Not an npm package.** There's no `npx closedrings-mcp connect`\n  CLI tool. Auth lives in the MCP protocol now (since the 2025-03-26\n  revision) — clients handle the OAuth dance natively.\n- **Not a local MCP server.** The remote MCP transport at\n  `api.closedrings.sh/mcp` is the only Closed Rings MCP server.\n- **Not a token-paste setup helper.** Once the OAuth path is live\n  on the main app, paste-token flows go away.\n\nThis repo is the *discovery layer* — the bit that puts Closed\nRings into the marketplaces users browse, with the right\nmanifests, descriptions, and branding for each.\n\n## Architecture in one diagram\n\n```\nClaude Desktop / Claude Code / Cursor\n        │\n        │   1. user adds the connector by URL\n        │   2. unauthenticated request gets 401 with\n        │      WWW-Authenticate pointing at the\n        │      /.well-known/oauth-protected-resource endpoint\n        ▼\n   closedrings.sh\n   ├── /.well-known/oauth-protected-resource    ──┐\n   ├── /.well-known/oauth-authorization-server    │\n   ├── /oauth/register     (Dynamic Client Reg.)  │  ← server-side\n   ├── /oauth/authorize    (consent UI)           │   work in the\n   ├── /oauth/token        (PKCE)                 │   main repo\n   └── /api/mcp            (existing transport;   ──┘\n                           accepts the token\n                           OAuth minted)\n```\n\nThe token OAuth mints is a `kind: agent` `ApiToken` — the same\nshape we already have for the manual `/profile/agents` flow. The\nMCP transport's auth code path doesn't change; only the\nprovisioning path does.\n\nFor the full server-side spec, see\n[`docs/architecture.md`](docs/architecture.md).\n\n## Companion skill\n\n`skill/SKILL.md` ships the `closedrings:track-time` playbook —\ntrigger phrases, project detection, confirm-writes rule,\nretroactive vs live, end-of-day formatting, recipes. Stays in\nsync with the server's `Mcp::Playbook::TEXT` (which is what gets\nsent via `serverInfo.instructions` on the MCP `initialize`\nhandshake).\n\nIf your client supports persistent rules / custom instructions /\nplugin-installed skills, point it at this file's URL:\n\n```\nhttps://raw.githubusercontent.com/samacs/closedrings-mcp/main/skill/SKILL.md\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE). The manifests and skill are open\nso any marketplace reviewer can audit them.\n",
  "bytes": 5333,
  "sha": "e22545c3e98200f50547170f397a92611c9b96e802d818dcb2438161451503c1",
  "repo_slug": "samacs/closedrings-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_samacs_closedrings_mcp_closed_rings_049b0240/readme"
}