@alacrity-ai/kbrelaymcp 0.1.0 → 0.2.0

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.
package/README.md CHANGED
@@ -4,7 +4,8 @@ An [MCP](https://modelcontextprotocol.io) server that gives an agent **kbRelay**
4
4
  powers — projects, cards, the timeline, and your @-mentions — over kbRelay's HTTP
5
5
  API. It's a thin, standalone stdio client: it carries no privileges of its own, so
6
6
  the API token's tenant and **project access (RBAC)** govern exactly what it can see
7
- and do.
7
+ and do. Point it at a token minted for an **agent user** and everything the agent
8
+ does is attributed to that agent (correct provenance).
8
9
 
9
10
  ## Install (Claude Code / Claude Desktop)
10
11
 
@@ -40,7 +41,7 @@ claude mcp add kbrelay --scope user \
40
41
  | Env var | Required | Purpose |
41
42
  |---|---|---|
42
43
  | `KBRELAY_BASE_URL` | yes | kbRelay origin, e.g. `https://kbrelay.lalalimited.com` or `http://localhost:8080`. |
43
- | `KBRELAY_API_KEY` | yes | A bearer token minted in the web **API keys** panel. Sent as `Authorization: Bearer …`. |
44
+ | `KBRELAY_API_KEY` | yes | A bearer token. For correct provenance, use a key minted for an **agent user** (web → *Team & access → Agents*) so the agent's work is attributed to it, not to you. A personal key from the **API keys** panel also works. Sent as `Authorization: Bearer …`. |
44
45
 
45
46
  ## Tools
46
47
 
@@ -51,6 +52,7 @@ claude mcp add kbrelay --scope user \
51
52
  | `list_projects` | read | Projects you can access (admins: all). |
52
53
  | `get_project` | read | A project + its columns (resolve column ids by name). |
53
54
  | `create_project` | write | New project (`code` required, seeds columns). |
55
+ | `update_project` | write | Edit a project's name/code/description/color/status. |
54
56
  | `list_cards` | read | Cards in a project (filter by column/assignee/q). |
55
57
  | `get_card` | read | One card (read the spec before working it). |
56
58
  | `create_card` | write | New card (markdown body; `@handle` to notify). |
@@ -29,19 +29,19 @@ export const allTools = [
29
29
  // ── Projects ──
30
30
  defineTool({
31
31
  name: 'list_projects',
32
- description: 'List projects you can access (admins: all). Each has a code (e.g. OBL) that prefixes its ticket keys.',
32
+ description: 'List projects you can access (admins: all). Each has a code (e.g. OBL) that prefixes ticket keys, plus a description (the project\'s purpose/context) and color.',
33
33
  inputSchema: z.object({ status: z.enum(['active', 'archived']).optional() }),
34
34
  handler: (a, c) => c.request('GET', `/v1/projects${qs({ status: a.status })}`),
35
35
  }),
36
36
  defineTool({
37
37
  name: 'get_project',
38
- description: 'Get one project and its columns. Column ids are per-project — always resolve them by name here, never hardcode.',
38
+ description: 'Get one project (name, code, description, color, status) and its columns. Read `description` to learn what the project is for. Column ids are per-project — resolve by name here, never hardcode.',
39
39
  inputSchema: z.object({ projectId: z.string() }),
40
40
  handler: (a, c) => c.request('GET', `/v1/projects/${enc(a.projectId)}`),
41
41
  }),
42
42
  defineTool({
43
43
  name: 'create_project',
44
- description: 'Create a project. `code` (2–6 alnum, e.g. LSEO) is required and prefixes ticket keys; default columns are seeded.',
44
+ description: 'Create a project. `code` (2–6 alnum, e.g. LSEO) is required and prefixes ticket keys; default columns are seeded. `description` gives future readers (human or agent) the project\'s purpose.',
45
45
  inputSchema: z.object({
46
46
  name: z.string(),
47
47
  code: z.string(),
@@ -50,6 +50,22 @@ export const allTools = [
50
50
  }),
51
51
  handler: (a, c) => c.request('POST', '/v1/projects', a),
52
52
  }),
53
+ defineTool({
54
+ name: 'update_project',
55
+ description: 'Edit a project: name, code, description (its purpose/context), color (#rrggbb or null to reset), or status (active/archived). Only pass the fields you want to change.',
56
+ inputSchema: z.object({
57
+ projectId: z.string(),
58
+ name: z.string().optional(),
59
+ code: z.string().optional(),
60
+ description: z.string().nullish(),
61
+ color: z.string().nullish(),
62
+ status: z.enum(['active', 'archived']).optional(),
63
+ }),
64
+ handler: (a, c) => {
65
+ const { projectId, ...body } = a;
66
+ return c.request('PATCH', `/v1/projects/${enc(projectId)}`, body);
67
+ },
68
+ }),
53
69
  // ── Cards ──
54
70
  defineTool({
55
71
  name: 'list_cards',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alacrity-ai/kbrelaymcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "MCP server for kbRelay — give an agent kanban powers (projects, cards, timeline, mentions) over the kbRelay API.",
5
5
  "type": "module",
6
6
  "license": "MIT",