@dain-os/mcp-server 0.17.0 → 0.18.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/dist/meta.d.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  * it here removes that drift between the two transports.
10
10
  */
11
11
  export declare const SERVER_NAME = "dainos";
12
- export declare const SERVER_VERSION = "0.17.0";
12
+ export declare const SERVER_VERSION = "0.18.0";
13
13
  /**
14
14
  * Instructions advertised to MCP clients in the `initialize` response.
15
15
  *
@@ -23,5 +23,5 @@ export declare const SERVER_VERSION = "0.17.0";
23
23
  * instruction it later runs, so stale tool names stay recoverable until the
24
24
  * library catches up.
25
25
  */
26
- export declare const SERVER_INSTRUCTIONS = "# DainOS MCP\n\nDainOS is the agency operating system (projects, tasks, proposals, CRM,\ndeveloper changelog/sessions/knowledge-base, and the Claude instruction\nlibrary). This server exposes it through two kinds of tools.\n\n## 1. Generic tools \u2014 operate on ANY resource\n\n- describe_schema \u2014 list every resource with its fields, filters, and allowed\n operations. CALL THIS FIRST in a session before reading or writing data you\n are not already certain about.\n- query \u2014 read. { resource, id? | filters? | search?, parentId?, sort?, limit?, offset? }\n- mutate \u2014 write. { resource, operation: 'create' | 'update' | 'delete', id?, parentId?, data? }\n\nNested resources need parentId (e.g. milestones under a project, comments under\na task). Free-text search only works on resources marked searchable.\n\n## 2. Semantic tools \u2014 carry business logic the generic trio can't express\n\nPrefer the semantic tool whenever one matches your intent:\n\n Tasks create_task \u00B7 complete_task \u00B7 regenerate_client_view\n Cadence claim_next_task \u00B7 report_task_progress \u00B7 mark_blocked \u00B7 request_unblock\n Proposals set_proposal_status \u00B7 create_proposal_option \u00B7 update_proposal_option\n set_recommended_option \u00B7 proposal_content \u00B7 describe_proposal_block_types\n Developer log_changelog_entry \u00B7 log_knowledge_base_entry \u00B7 log_time_entry \u00B7 score_pr_finding\n Library get_instruction \u00B7 list_instructions \u00B7 search_instructions \u00B7 upsert_instruction\n\nThese are all CURRENT. Do not translate them.\n\n## Old tool names (read this if an instruction names a tool you don't have)\n\nv0.8 removed ~36 thin CRUD tools. If a command, skill, or rule tells you to call\na tool that is NOT listed above, it predates the refactor. Translate it:\n\n list_projects / get_project -> query projects\n list_tasks / get_task -> query tasks\n list_milestones -> query milestones (parentId = projectId)\n update_task -> mutate tasks update\n add_task_comment -> mutate task_comments create (parentId = taskId)\n list_proposals / get_proposal -> query proposals\n list_recent_sessions / list_sessions -> query session_context\n log_session_context -> mutate session_context create\n list_changelog -> query developer_changelog\n search_knowledge_base -> query developer_knowledge_base (search = \"...\")\n update_knowledge_base_entry -> mutate developer_knowledge_base update\n list_tenant_users / list_users -> query iam_users (filters: status)\n get_user -> query iam_users (id = \"...\")\n lookup_product_repos -> query product_repos (filters: owner, repo)\n summarise_product_tasks -> query product_task_summary (parentId = productId)\n list_unscored_pr_findings -> query pr_review_findings (filters: repo, prNumber, scoredBy)\n\ncomplete_task still exists for the task done-state walk \u2014 only the plain field\nupdate moved to mutate. When in doubt, call describe_schema and match your\nintent to a resource.";
26
+ export declare const SERVER_INSTRUCTIONS = "# DainOS MCP\n\nDainOS is the agency operating system (projects, tasks, proposals, CRM,\ndeveloper changelog/sessions/knowledge-base, and the Claude instruction\nlibrary). This server exposes it through two kinds of tools.\n\n## 1. Generic tools \u2014 operate on ANY resource\n\n- describe_schema \u2014 list every resource with its fields, filters, and allowed\n operations. CALL THIS FIRST in a session before reading or writing data you\n are not already certain about.\n- query \u2014 read. { resource, id? | filters? | search?, parentId?, sort?, limit?, offset? }\n- mutate \u2014 write. { resource, operation: 'create' | 'update' | 'delete', id?, parentId?, data? }\n\nNested resources need parentId (e.g. milestones under a project, comments under\na task). Free-text search only works on resources marked searchable.\n\n## 2. Semantic tools \u2014 carry business logic the generic trio can't express\n\nPrefer the semantic tool whenever one matches your intent:\n\n Tasks create_task \u00B7 complete_task \u00B7 regenerate_client_view\n Cadence claim_next_task \u00B7 report_task_progress \u00B7 mark_blocked \u00B7 request_unblock\n Proposals set_proposal_status \u00B7 create_proposal_option \u00B7 update_proposal_option\n set_recommended_option \u00B7 proposal_content \u00B7 describe_proposal_block_types\n Developer log_changelog_entry \u00B7 log_knowledge_base_entry \u00B7 log_time_entry \u00B7 score_pr_finding\n AI spend get_ai_spend_totals \u00B7 get_ai_spend_summary\n Library get_instruction \u00B7 list_instructions \u00B7 search_instructions \u00B7 upsert_instruction\n\nThese are all CURRENT. Do not translate them.\n\n## Old tool names (read this if an instruction names a tool you don't have)\n\nv0.8 removed ~36 thin CRUD tools. If a command, skill, or rule tells you to call\na tool that is NOT listed above, it predates the refactor. Translate it:\n\n list_projects / get_project -> query projects\n list_tasks / get_task -> query tasks\n list_milestones -> query milestones (parentId = projectId)\n update_task -> mutate tasks update\n add_task_comment -> mutate task_comments create (parentId = taskId)\n list_proposals / get_proposal -> query proposals\n list_recent_sessions / list_sessions -> query session_context\n log_session_context -> mutate session_context create\n list_changelog -> query developer_changelog\n search_knowledge_base -> query developer_knowledge_base (search = \"...\")\n update_knowledge_base_entry -> mutate developer_knowledge_base update\n list_tenant_users / list_users -> query iam_users (filters: status)\n get_user -> query iam_users (id = \"...\")\n lookup_product_repos -> query product_repos (filters: owner, repo)\n summarise_product_tasks -> query product_task_summary (parentId = productId)\n list_unscored_pr_findings -> query pr_review_findings (filters: repo, prNumber, scoredBy)\n\ncomplete_task still exists for the task done-state walk \u2014 only the plain field\nupdate moved to mutate. When in doubt, call describe_schema and match your\nintent to a resource.";
27
27
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,stGAsDV,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,oxGAuDV,CAAC"}
package/dist/meta.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * it here removes that drift between the two transports.
10
10
  */
11
11
  export const SERVER_NAME = 'dainos';
12
- export const SERVER_VERSION = '0.17.0';
12
+ export const SERVER_VERSION = '0.18.0';
13
13
  /**
14
14
  * Instructions advertised to MCP clients in the `initialize` response.
15
15
  *
@@ -49,6 +49,7 @@ Prefer the semantic tool whenever one matches your intent:
49
49
  Proposals set_proposal_status · create_proposal_option · update_proposal_option
50
50
  set_recommended_option · proposal_content · describe_proposal_block_types
51
51
  Developer log_changelog_entry · log_knowledge_base_entry · log_time_entry · score_pr_finding
52
+ AI spend get_ai_spend_totals · get_ai_spend_summary
52
53
  Library get_instruction · list_instructions · search_instructions · upsert_instruction
53
54
 
54
55
  These are all CURRENT. Do not translate them.
package/dist/meta.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAsDb,CAAC"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAuDb,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * AI spend semantic tools — read-only views over the tenant's AI cost ledger.
3
+ *
4
+ * Two cost streams, two currencies, never summed:
5
+ * - completion spend lives in app.ai_usage_logs and is reported in USD cents
6
+ * (Anthropic bills in USD).
7
+ * - embedding spend lives in app.embedding_costs and is reported in GBP
8
+ * (the embedding writer converts at write time).
9
+ *
10
+ * Backed by the Express routes under /ai/usage (see ai-usage.routes.ts). The
11
+ * reads are gated only by the ai_assistant module and are tenant-scoped, so the
12
+ * PAT owner only ever sees their own tenant's spend.
13
+ */
14
+ import type { ToolDefinition } from '../types.js';
15
+ export declare const aiUsageSemanticTools: ToolDefinition[];
16
+ //# sourceMappingURL=ai-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-usage.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/ai-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA8ElD,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAGhD,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * AI spend semantic tools — read-only views over the tenant's AI cost ledger.
3
+ *
4
+ * Two cost streams, two currencies, never summed:
5
+ * - completion spend lives in app.ai_usage_logs and is reported in USD cents
6
+ * (Anthropic bills in USD).
7
+ * - embedding spend lives in app.embedding_costs and is reported in GBP
8
+ * (the embedding writer converts at write time).
9
+ *
10
+ * Backed by the Express routes under /ai/usage (see ai-usage.routes.ts). The
11
+ * reads are gated only by the ai_assistant module and are tenant-scoped, so the
12
+ * PAT owner only ever sees their own tenant's spend.
13
+ */
14
+ import { z } from 'zod';
15
+ // ── get_ai_spend_totals ──────────────────────────────────────────────
16
+ const getAiSpendTotals = {
17
+ name: 'get_ai_spend_totals',
18
+ description: 'Headline AI spend for the current tenant: this calendar month, this ' +
19
+ 'calendar quarter, and all-time. Returns BOTH cost streams: `completion` ' +
20
+ '(Otto/LLM calls, USD cents) and `embeddings` (RAG embedding calls, GBP). ' +
21
+ 'The two are different currencies and must NOT be summed into one figure. ' +
22
+ 'Present them separately. Use for "what are we spending on AI?".',
23
+ inputSchema: z.object({}),
24
+ handler: async (client) => {
25
+ const [completion, embeddings] = await Promise.all([
26
+ client.get('/ai/usage/totals'),
27
+ client.get('/ai/usage/embeddings/totals'),
28
+ ]);
29
+ return {
30
+ completion: { currency: 'USD_cents', ...completion },
31
+ embeddings: { currency: 'GBP', ...embeddings },
32
+ note: 'completion costs are USD cents; embedding costs are GBP. Do not sum across the two.',
33
+ };
34
+ },
35
+ };
36
+ // ── get_ai_spend_summary ─────────────────────────────────────────────
37
+ const getAiSpendSummary = {
38
+ name: 'get_ai_spend_summary',
39
+ description: 'Aggregated AI spend broken down by a grouping key, for the current tenant. ' +
40
+ 'Choose `source`: "completion" (Otto/LLM spend, USD cents, group by feature, ' +
41
+ 'user, or model) or "embeddings" (RAG spend, GBP, group by provider, model, ' +
42
+ 'or call_kind). Optional `from`/`to` ISO 8601 dates bound the window. Use for ' +
43
+ '"which feature costs the most?" or "AI spend by model last month".',
44
+ inputSchema: z.object({
45
+ source: z
46
+ .enum(['completion', 'embeddings'])
47
+ .default('completion')
48
+ .describe('"completion" = ai_usage_logs (USD cents); "embeddings" = embedding_costs (GBP).'),
49
+ groupBy: z
50
+ .string()
51
+ .optional()
52
+ .describe('Grouping key. completion: feature | user | model (default feature). ' +
53
+ 'embeddings: provider | model | call_kind (default model).'),
54
+ from: z.string().optional().describe('ISO 8601 start of window (inclusive).'),
55
+ to: z.string().optional().describe('ISO 8601 end of window (inclusive).'),
56
+ }),
57
+ handler: async (client, input) => {
58
+ const params = new URLSearchParams();
59
+ if (input.groupBy)
60
+ params.set('groupBy', input.groupBy);
61
+ if (input.from)
62
+ params.set('from', input.from);
63
+ if (input.to)
64
+ params.set('to', input.to);
65
+ const qs = params.toString();
66
+ const suffix = qs ? `?${qs}` : '';
67
+ const path = input.source === 'embeddings'
68
+ ? `/ai/usage/embeddings/summary${suffix}`
69
+ : `/ai/usage/summary${suffix}`;
70
+ return client.get(path);
71
+ },
72
+ };
73
+ export const aiUsageSemanticTools = [
74
+ getAiSpendTotals,
75
+ getAiSpendSummary,
76
+ ];
77
+ //# sourceMappingURL=ai-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-usage.js","sourceRoot":"","sources":["../../../src/tools/semantic/ai-usage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,wEAAwE;AAExE,MAAM,gBAAgB,GAAmB;IACvC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,sEAAsE;QACtE,0EAA0E;QAC1E,2EAA2E;QAC3E,2EAA2E;QAC3E,iEAAiE;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,MAAM,CAAC,GAAG,CAAc,kBAAkB,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAkB,6BAA6B,CAAC;SAC3D,CAAC,CAAC;QACH,OAAO;YACL,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE;YACpD,UAAU,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;YAC9C,IAAI,EAAE,qFAAqF;SAC5F,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,wEAAwE;AAExE,MAAM,iBAAiB,GAAmB;IACxC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,6EAA6E;QAC7E,8EAA8E;QAC9E,6EAA6E;QAC7E,+EAA+E;QAC/E,oEAAoE;IACtE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;aAClC,OAAO,CAAC,YAAY,CAAC;aACrB,QAAQ,CAAC,iFAAiF,CAAC;QAC9F,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE;YACpE,2DAA2D,CAC9D;QACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC7E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC1E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,KAAK,YAAY;YAC3B,CAAC,CAAC,+BAA+B,MAAM,EAAE;YACzC,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAqB;IACpD,gBAAgB;IAChB,iBAAiB;CAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,eAAO,MAAM,aAAa,EAAE,cAAc,EAMzC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,eAAO,MAAM,aAAa,EAAE,cAAc,EAOzC,CAAC"}
@@ -7,11 +7,13 @@ import { cadenceSemanticTools } from './cadence.js';
7
7
  import { proposalSemanticTools } from './proposals.js';
8
8
  import { proposalContentTools } from './proposal-content.js';
9
9
  import { developerSemanticTools } from './developer.js';
10
+ import { aiUsageSemanticTools } from './ai-usage.js';
10
11
  export const semanticTools = [
11
12
  ...taskSemanticTools, // create_task, complete_task, regenerate_client_view
12
13
  ...cadenceSemanticTools, // claim_next_task, report_task_progress, mark_blocked, request_unblock
13
14
  ...proposalSemanticTools, // set_proposal_status, create/update_proposal_option, set_recommended_option
14
15
  ...proposalContentTools, // proposal_content (consolidated ops), describe_proposal_block_types
15
16
  ...developerSemanticTools, // log_changelog_entry, log_knowledge_base_entry, log_time_entry, score_pr_finding
17
+ ...aiUsageSemanticTools, // get_ai_spend_totals, get_ai_spend_summary
16
18
  ];
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,GAAG,iBAAiB,EAAW,qDAAqD;IACpF,GAAG,oBAAoB,EAAQ,uEAAuE;IACtG,GAAG,qBAAqB,EAAO,6EAA6E;IAC5G,GAAG,oBAAoB,EAAQ,qEAAqE;IACpG,GAAG,sBAAsB,EAAM,kFAAkF;CAClH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/semantic/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,GAAG,iBAAiB,EAAW,qDAAqD;IACpF,GAAG,oBAAoB,EAAQ,uEAAuE;IACtG,GAAG,qBAAqB,EAAO,6EAA6E;IAC5G,GAAG,oBAAoB,EAAQ,qEAAqE;IACpG,GAAG,sBAAsB,EAAM,kFAAkF;IACjH,GAAG,oBAAoB,EAAQ,4CAA4C;CAC5E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dain-os/mcp-server",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "MCP server for DainOS — manage projects, tasks, proposals, and proposal content from Claude Code and other MCP clients",
5
5
  "type": "module",
6
6
  "bin": {