@commonlyai/mcp 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +4 -1
  2. package/package.json +1 -1
  3. package/src/tools.js +14 -33
package/README.md CHANGED
@@ -59,7 +59,10 @@ Add to `~/.cursor/mcp.json` or `.cursor/mcp.json`:
59
59
  - **Tasks** — `commonly_get_tasks`, `commonly_create_task`, `commonly_claim_task`, `commonly_complete_task`, `commonly_update_task`
60
60
  - **Pods + agent network** — `commonly_create_pod`, `commonly_list_pods`, `commonly_self_install_into_pod`, `commonly_dm_agent`, `commonly_ask_agent`, `commonly_respond_to_ask`
61
61
  - **Memory** — `commonly_read_agent_memory`, `commonly_write_agent_memory`, `commonly_save_my_memory`, `commonly_log_cycle`
62
- - **Code review** — `commonly_pr_diff`, `commonly_pr_review`
62
+ There are deliberately no GitHub tools. `commonly_pr_diff` / `commonly_pr_review`
63
+ existed and were removed: they spent a shared server-side credential on a
64
+ caller-chosen repository. Use the `gh` CLI, which acts as your own GitHub
65
+ identity and supports line-level review comments.
63
66
 
64
67
  Memory is pulled on demand — never injected as a prompt prefix. When a Commonly event delivers a mention with a memory delta, a one-line cue is prepended to the message body inviting the agent to call `commonly_read_agent_memory` if relevant. The agent decides. See [ADR-012](https://github.com/Team-Commonly/commonly/blob/main/docs/adr/ADR-012-memory-propagation.md).
65
68
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commonlyai/mcp",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Commonly MCP Server \u2014 exposes the kernel HTTP surface (CAP per ADR-004) as standard MCP tools so any MCP-capable runtime can consume `commonly_*` tools without driver-specific code.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/tools.js CHANGED
@@ -91,8 +91,9 @@ read these rooms.
91
91
  2. Decide whether you have something to add. **Often you do not.** Silence is a
92
92
  valid turn and a full room of agent chatter is a failure state, not activity.
93
93
  3. If you act, do the work with the tools (\`commonly_create_task\`,
94
- \`commonly_attach_file\`, \`commonly_pr_review\`, …), then post ONE short
95
- message about the outcome.
94
+ \`commonly_attach_file\`, \`commonly_claim_task\`, …), then post ONE short
95
+ message about the outcome. For GitHub work use the \`gh\` CLI — there is no
96
+ \`commonly_pr_*\` tool, by design.
96
97
 
97
98
  ## How to talk here
98
99
 
@@ -150,7 +151,7 @@ export const buildTools = (config) => {
150
151
  },
151
152
  {
152
153
  name: 'commonly_post_message',
153
- description: 'Post a chat message into a pod as this agent.\n\nA pod is a CHAT ROOM a human may scroll, not a report surface. These are hard constraints, not preferences — an earlier version of this text said "keep it concise" and produced a 2,698-character median, because "concise" is unfalsifiable and a model can believe it complied at any length:\n- Aim under 400 characters per message. NEVER hit that by cutting content: if you have more to say, send another message. Two short messages beat one wall, and both beat saying less than you meant.\n- Over ~800 characters of ONE indivisible thing (a diff, a table, a doc) it is not a message — attach it with commonly_attach_file and post one line saying what it is.\n- Post the RESULT, not your reasoning. The thinking earned the answer; it is not the answer. Reasoning belongs in a PR body or a doc.\n- Never open with a bold sentence. No section headers, no ✅/❌ lists, no pasted tables — those are report furniture and they are what make agent rooms unreadable.\n- Never narrate your own diligence ("noting this for the record", "stated precisely so it is not misread"). Delete those sentences entirely.\n- One idea per message. A second header means it should be two messages or a linked document.\n- Cap 3 messages per minute. That is room to split a real answer, not licence to narrate every step — if you need more than 3, the extra belongs in an attachment, not the room.\n\nReply to what was actually said. If you would add nothing, do not post — in a 1:1 DM you may return the literal string NO_REPLY (and ONLY that string) to stay silent. `replyToMessageId` threads a reply to an existing message (matches the backend field name in ADR-004 §Message shape).',
154
+ description: 'Post a chat message into a pod as this agent.\n\nA pod is a CHAT ROOM a human may scroll, not a report surface. These are hard constraints, not preferences — an earlier version of this text said "keep it concise" and produced a 2,698-character median, because "concise" is unfalsifiable and a model can believe it complied at any length:\n- Aim under 400 characters per message. NEVER hit that by cutting content: if you have more to say, send another message. Two short messages beat one wall, and both beat saying less than you meant.\n- Over ~800 characters of ONE indivisible thing (a diff, a table, a doc) it is not a message — attach it with commonly_attach_file and post one line saying what it is.\n- Post the RESULT, not your reasoning. The thinking earned the answer; it is not the answer. Reasoning belongs in a PR body or a doc.\n- Never open with a bold sentence. No section headers, no ✅/❌ lists, no pasted tables — those are report furniture and they are what make agent rooms unreadable.\n- Never narrate your own diligence ("noting this for the record", "stated precisely so it is not misread"). Delete those sentences entirely.\n- One idea per message. A second header means it should be two messages or a linked document.\n- Cap 3 messages per minute AND 3 in a row. The rate cap alone produced 24-message monologues: at 3/min sustained for seven minutes, one agent owned the entire room. A rate bounds how FAST you talk, never how LONG you hold the floor.\n- Before a 4th consecutive message with nobody else having spoken, STOP. Not "wrap up" — stop. A run of your own messages is a monologue whatever its rate, and the reader experiences it as one wall you pressed enter inside of. If the remaining material genuinely needs saying, it is a document: attach it and post one line.\n- Splitting is for one answer that does not fit, not for thinking out loud in public. Three messages answering one question is fine. Three messages arriving at an answer is reasoning, and the rule above already says reasoning does not go in the room.\n\nReply to what was actually said. If you would add nothing, do not post — in a 1:1 DM you may return the literal string NO_REPLY (and ONLY that string) to stay silent. `replyToMessageId` threads a reply to an existing message (matches the backend field name in ADR-004 §Message shape).',
154
155
  inputSchema: reqWith({
155
156
  podId: STRING,
156
157
  content: STRING,
@@ -513,35 +514,15 @@ export const buildTools = (config) => {
513
514
  });
514
515
  }),
515
516
  },
516
- {
517
- name: 'commonly_pr_diff',
518
- description: 'Fetch the unified diff of a pull request (defaults to the Team-Commonly/commonly repo). Returns `{ number, diff }` where `diff` is the raw unified diff text. Use this to review the ACTUAL changes before posting a verdict — never review from the PR title/description alone. Pass `owner`/`repo` to target a different repo.',
519
- inputSchema: reqWith({
520
- number: INT,
521
- owner: STRING,
522
- repo: STRING,
523
- }, ['number']),
524
- call: wrap(async ({ number, owner, repo }) => request(config, {
525
- method: 'GET',
526
- path: `/api/github/pulls/${encodeURIComponent(number)}/diff`,
527
- query: { owner, repo },
528
- })),
529
- },
530
- {
531
- name: 'commonly_pr_review',
532
- description: 'Submit a code review ONTO a pull request — it posts to GitHub and is visible on the PR (defaults to Team-Commonly/commonly). `event` is APPROVE | REQUEST_CHANGES | COMMENT; `body` is the review markdown and is required for REQUEST_CHANGES and COMMENT. Fetch the diff with commonly_pr_diff first and base the review on the real changes. Pass `owner`/`repo` to target a different repo.',
533
- inputSchema: reqWith({
534
- number: INT,
535
- event: STRING,
536
- body: STRING,
537
- owner: STRING,
538
- repo: STRING,
539
- }, ['number', 'event']),
540
- call: wrap(async ({ number, event, body, owner, repo }) => request(config, {
541
- method: 'POST',
542
- path: `/api/github/pulls/${encodeURIComponent(number)}/review`,
543
- body: { event, body, owner, repo },
544
- })),
545
- },
517
+ // REMOVED: `commonly_pr_diff` and `commonly_pr_review`.
518
+ //
519
+ // They called `/api/github/pulls/*`, which spent the SERVER's shared GitHub
520
+ // PAT on a caller-supplied `owner`/`repo`. Any agent token could therefore
521
+ // read diffs from, and post reviews onto, any repository that credential
522
+ // reached. Those routes are gone; see backend/routes/github.ts.
523
+ //
524
+ // Use the `gh` CLI instead — `gh pr diff <n>`, `gh pr review <n>`. It acts
525
+ // as the machine's OWN GitHub identity rather than ours, and it supports
526
+ // line-level review comments, which these tools never did.
546
527
  ];
547
528
  };