@dain-os/mcp-server 0.7.0 → 0.8.1

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 (87) hide show
  1. package/README.md +66 -24
  2. package/dist/index.js +0 -0
  3. package/dist/tools/generic.d.ts +14 -0
  4. package/dist/tools/generic.d.ts.map +1 -0
  5. package/dist/tools/generic.js +238 -0
  6. package/dist/tools/generic.js.map +1 -0
  7. package/dist/tools/index.d.ts +8 -14
  8. package/dist/tools/index.d.ts.map +1 -1
  9. package/dist/tools/index.js +12 -36
  10. package/dist/tools/index.js.map +1 -1
  11. package/dist/tools/registry.d.ts +55 -0
  12. package/dist/tools/registry.d.ts.map +1 -0
  13. package/dist/tools/registry.js +340 -0
  14. package/dist/tools/registry.js.map +1 -0
  15. package/dist/tools/semantic/cadence.d.ts +7 -0
  16. package/dist/tools/semantic/cadence.d.ts.map +1 -0
  17. package/dist/tools/semantic/cadence.js +120 -0
  18. package/dist/tools/semantic/cadence.js.map +1 -0
  19. package/dist/tools/semantic/developer.d.ts +7 -0
  20. package/dist/tools/semantic/developer.d.ts.map +1 -0
  21. package/dist/tools/semantic/developer.js +145 -0
  22. package/dist/tools/semantic/developer.js.map +1 -0
  23. package/dist/tools/semantic/index.d.ts +7 -0
  24. package/dist/tools/semantic/index.d.ts.map +1 -0
  25. package/dist/tools/semantic/index.js +17 -0
  26. package/dist/tools/semantic/index.js.map +1 -0
  27. package/dist/tools/semantic/proposal-content.d.ts +9 -0
  28. package/dist/tools/semantic/proposal-content.d.ts.map +1 -0
  29. package/dist/tools/semantic/proposal-content.js +118 -0
  30. package/dist/tools/semantic/proposal-content.js.map +1 -0
  31. package/dist/tools/semantic/proposals.d.ts +7 -0
  32. package/dist/tools/semantic/proposals.d.ts.map +1 -0
  33. package/dist/tools/semantic/proposals.js +107 -0
  34. package/dist/tools/semantic/proposals.js.map +1 -0
  35. package/dist/tools/semantic/tasks.d.ts +7 -0
  36. package/dist/tools/semantic/tasks.d.ts.map +1 -0
  37. package/dist/tools/semantic/tasks.js +123 -0
  38. package/dist/tools/semantic/tasks.js.map +1 -0
  39. package/package.json +1 -1
  40. package/dist/tools/cadence.d.ts +0 -4
  41. package/dist/tools/cadence.d.ts.map +0 -1
  42. package/dist/tools/cadence.js +0 -245
  43. package/dist/tools/cadence.js.map +0 -1
  44. package/dist/tools/comments.d.ts +0 -3
  45. package/dist/tools/comments.d.ts.map +0 -1
  46. package/dist/tools/comments.js +0 -19
  47. package/dist/tools/comments.js.map +0 -1
  48. package/dist/tools/developer.d.ts +0 -3
  49. package/dist/tools/developer.d.ts.map +0 -1
  50. package/dist/tools/developer.js +0 -349
  51. package/dist/tools/developer.js.map +0 -1
  52. package/dist/tools/iam.d.ts +0 -3
  53. package/dist/tools/iam.d.ts.map +0 -1
  54. package/dist/tools/iam.js +0 -38
  55. package/dist/tools/iam.js.map +0 -1
  56. package/dist/tools/log-time-entry.d.ts +0 -3
  57. package/dist/tools/log-time-entry.d.ts.map +0 -1
  58. package/dist/tools/log-time-entry.js +0 -54
  59. package/dist/tools/log-time-entry.js.map +0 -1
  60. package/dist/tools/pr-review.d.ts +0 -3
  61. package/dist/tools/pr-review.d.ts.map +0 -1
  62. package/dist/tools/pr-review.js +0 -83
  63. package/dist/tools/pr-review.js.map +0 -1
  64. package/dist/tools/products.d.ts +0 -3
  65. package/dist/tools/products.d.ts.map +0 -1
  66. package/dist/tools/products.js +0 -37
  67. package/dist/tools/products.js.map +0 -1
  68. package/dist/tools/projects.d.ts +0 -3
  69. package/dist/tools/projects.d.ts.map +0 -1
  70. package/dist/tools/projects.js +0 -151
  71. package/dist/tools/projects.js.map +0 -1
  72. package/dist/tools/proposal-content.d.ts +0 -3
  73. package/dist/tools/proposal-content.d.ts.map +0 -1
  74. package/dist/tools/proposal-content.js +0 -136
  75. package/dist/tools/proposal-content.js.map +0 -1
  76. package/dist/tools/proposal-options.d.ts +0 -3
  77. package/dist/tools/proposal-options.d.ts.map +0 -1
  78. package/dist/tools/proposal-options.js +0 -132
  79. package/dist/tools/proposal-options.js.map +0 -1
  80. package/dist/tools/proposals.d.ts +0 -22
  81. package/dist/tools/proposals.d.ts.map +0 -1
  82. package/dist/tools/proposals.js +0 -179
  83. package/dist/tools/proposals.js.map +0 -1
  84. package/dist/tools/tasks.d.ts +0 -3
  85. package/dist/tools/tasks.d.ts.map +0 -1
  86. package/dist/tools/tasks.js +0 -255
  87. package/dist/tools/tasks.js.map +0 -1
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Developer semantic tools — batch writes with preprocessing that
3
+ * doesn't fit the generic mutate pattern.
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Some MCP clients serialise array args as JSON-encoded strings.
8
+ * This preprocessor handles both spellings.
9
+ */
10
+ function jsonStringArray(item, min = 1, max = 50) {
11
+ return z.preprocess((val) => {
12
+ if (typeof val === 'string') {
13
+ try {
14
+ return JSON.parse(val);
15
+ }
16
+ catch {
17
+ return val;
18
+ }
19
+ }
20
+ return val;
21
+ }, z.array(item).min(min).max(max));
22
+ }
23
+ const optionalString = z.preprocess((val) => (val === null ? undefined : val), z.string().optional());
24
+ function nullishOptional(schema) {
25
+ return z.preprocess((val) => (val === null ? undefined : val), schema.optional());
26
+ }
27
+ const commitTypeEnum = z.enum([
28
+ 'feat', 'fix', 'chore', 'refactor', 'test', 'docs', 'perf', 'ci', 'build', 'revert', 'style',
29
+ ]);
30
+ const sourceTypeEnum = z.enum([
31
+ 'fix_commit', 'pr_comment', 'pr_review', 'code_review',
32
+ 'ai_conversation', 'incident', 'documentation', 'debugging_session',
33
+ ]);
34
+ const severityEnum = z.enum(['critical', 'high', 'medium', 'low']);
35
+ const kbCategoryEnum = z.enum(['gotcha', 'pattern', 'lesson', 'decision', 'workaround']);
36
+ // ── log_changelog_entry ─────────────────────────────────────────────
37
+ const changelogEntrySchema = z.object({
38
+ commit_sha: z.string().length(40).describe('Full 40-character SHA.'),
39
+ branch: optionalString.describe('Defaults to "main" if omitted.'),
40
+ commit_type: commitTypeEnum.describe('Conventional-commit type prefix.'),
41
+ scope: optionalString,
42
+ summary: z.string().describe('Commit message subject line.'),
43
+ description: optionalString,
44
+ files_changed: nullishOptional(z.coerce.number().int()),
45
+ insertions: nullishOptional(z.coerce.number().int()),
46
+ deletions: nullishOptional(z.coerce.number().int()),
47
+ milestone: optionalString,
48
+ task_ref: optionalString.describe('Linear / Jira / Notion task id.'),
49
+ impacts_config: nullishOptional(z.boolean()).describe('Defaults false.'),
50
+ breaking_change: nullishOptional(z.boolean()).describe('Defaults false.'),
51
+ tags: nullishOptional(z.array(z.string())),
52
+ author: optionalString,
53
+ committed_at: z.string().describe('ISO 8601 timestamp.'),
54
+ pr_number: nullishOptional(z.coerce.number().int()),
55
+ pr_url: optionalString,
56
+ });
57
+ const logChangelogEntry = {
58
+ name: 'log_changelog_entry',
59
+ description: 'Append commit records to the developer changelog for a project. ' +
60
+ 'Accepts a batch (1-50 entries). Idempotent on (project, commit_sha). ' +
61
+ 'Returns { inserted, skipped } counts.',
62
+ inputSchema: z.object({
63
+ project: z.string().describe('Project slug, e.g. "dain-os", "herbert".'),
64
+ entries: jsonStringArray(changelogEntrySchema, 1, 50),
65
+ }),
66
+ handler: async (client, input) => {
67
+ const entries = input.entries.map((entry) => ({
68
+ ...entry,
69
+ project: input.project,
70
+ }));
71
+ return client.post('/developer/changelog', { entries });
72
+ },
73
+ };
74
+ // ── log_knowledge_base_entry ────────────────────────────────────────
75
+ const kbEntrySchema = z.object({
76
+ category: kbCategoryEnum,
77
+ module: z.string().describe('System / area, e.g. "auth", "react", "prisma".'),
78
+ title: z.string().describe('Short descriptive title.'),
79
+ description: z.string().describe('What happened / what is this.'),
80
+ impact: optionalString.describe('What goes wrong if you don\'t know this.'),
81
+ prevention: optionalString.describe('How to avoid it next time.'),
82
+ severity: nullishOptional(severityEnum),
83
+ source_type: sourceTypeEnum,
84
+ source_refs: nullishOptional(z.array(z.string())).describe('Links, file paths, or SHAs.'),
85
+ tags: nullishOptional(z.array(z.string())),
86
+ platform: optionalString.describe('e.g. "supabase", "anthropic", "vercel".'),
87
+ });
88
+ const logKnowledgeBaseEntry = {
89
+ name: 'log_knowledge_base_entry',
90
+ description: 'Append KB findings for a project. Only add SURPRISING or NON-OBVIOUS findings. ' +
91
+ 'Accepts a batch (1-50 entries). Check for duplicates via query first.',
92
+ inputSchema: z.object({
93
+ project: z.string().describe('Project slug. Use "universal" for cross-product lessons.'),
94
+ entries: jsonStringArray(kbEntrySchema, 1, 50),
95
+ }),
96
+ handler: async (client, input) => {
97
+ const entries = input.entries.map((entry) => ({
98
+ ...entry,
99
+ project: input.project,
100
+ }));
101
+ return client.post('/developer/knowledge-base', { entries });
102
+ },
103
+ };
104
+ // ── log_time_entry ──────────────────────────────────────────────────
105
+ const logTimeEntry = {
106
+ name: 'log_time_entry',
107
+ description: 'Log a time entry for a development session. Idempotent on sessionContextId. ' +
108
+ 'Used by /wrap-up immediately after log_session_context.',
109
+ inputSchema: z.object({
110
+ operatorIamUserId: z.string().uuid().describe('iam_users.id of the operator.'),
111
+ sessionContextId: z.string().uuid().describe('UUID from log_session_context. Idempotency key.'),
112
+ projectSlug: z.string().min(1).max(200).describe('Project slug.'),
113
+ taskIds: z.array(z.string().uuid()).default([]).describe('Task UUIDs worked during session.'),
114
+ durationMinutes: z.number().int().positive().max(1440).describe('Duration in minutes.'),
115
+ entryDate: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe('YYYY-MM-DD.'),
116
+ description: z.string().max(500).optional().describe('What was done.'),
117
+ isBillable: z.boolean().default(false).describe('Defaults false.'),
118
+ }),
119
+ handler: async (client, input) => client.post('/developer/time-entries', input),
120
+ };
121
+ // ── score_pr_finding ────────────────────────────────────────────────
122
+ const verdictEnum = z.enum(['useful', 'noise', 'wrong']);
123
+ const scorePrFinding = {
124
+ name: 'score_pr_finding',
125
+ description: 'Record a verdict (useful/noise/wrong) for a DainOS-reviewer finding. ' +
126
+ 'Returns 201 on success, 409 if already scored, 404 if finding unknown.',
127
+ inputSchema: z.object({
128
+ findingId: z.string().uuid(),
129
+ verdict: verdictEnum,
130
+ scoredBy: z.string().uuid().describe('UUID of the scoring user.'),
131
+ notes: z.string().max(2000).optional().describe('Optional verdict explanation.'),
132
+ reviewerVersion: z.string().max(100).optional().describe('Reviewer version at scoring time.'),
133
+ }),
134
+ handler: async (client, input) => {
135
+ const { findingId, ...body } = input;
136
+ return client.post(`/pr-review/findings/${findingId}/feedback`, body);
137
+ },
138
+ };
139
+ export const developerSemanticTools = [
140
+ logChangelogEntry,
141
+ logKnowledgeBaseEntry,
142
+ logTimeEntry,
143
+ scorePrFinding,
144
+ ];
145
+ //# sourceMappingURL=developer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developer.js","sourceRoot":"","sources":["../../../src/tools/semantic/developer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Semantic tools barrel — re-exports all named tools that carry
3
+ * business logic and can't be expressed as generic CRUD.
4
+ */
5
+ import type { ToolDefinition } from '../types.js';
6
+ export declare const semanticTools: ToolDefinition[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Semantic tools barrel — re-exports all named tools that carry
3
+ * business logic and can't be expressed as generic CRUD.
4
+ */
5
+ import { taskSemanticTools } from './tasks.js';
6
+ import { cadenceSemanticTools } from './cadence.js';
7
+ import { proposalSemanticTools } from './proposals.js';
8
+ import { proposalContentTools } from './proposal-content.js';
9
+ import { developerSemanticTools } from './developer.js';
10
+ export const semanticTools = [
11
+ ...taskSemanticTools, // create_task, complete_task, regenerate_client_view
12
+ ...cadenceSemanticTools, // claim_next_task, report_task_progress, mark_blocked, request_unblock
13
+ ...proposalSemanticTools, // set_proposal_status, create/update_proposal_option, set_recommended_option
14
+ ...proposalContentTools, // proposal_content (consolidated ops), describe_proposal_block_types
15
+ ...developerSemanticTools, // log_changelog_entry, log_knowledge_base_entry, log_time_entry, score_pr_finding
16
+ ];
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Proposal content semantic tool — consolidated from 7 individual ops tools.
3
+ *
4
+ * All operations hit PATCH /crm/proposals/:proposalId/content with
5
+ * an ops array. The op parameter selects which operation to perform.
6
+ */
7
+ import type { ToolDefinition } from '../types.js';
8
+ export declare const proposalContentTools: ToolDefinition[];
9
+ //# sourceMappingURL=proposal-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-content.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/proposal-content.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA0GlD,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAGhD,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Proposal content semantic tool — consolidated from 7 individual ops tools.
3
+ *
4
+ * All operations hit PATCH /crm/proposals/:proposalId/content with
5
+ * an ops array. The op parameter selects which operation to perform.
6
+ */
7
+ import { z } from 'zod';
8
+ import { buildBlockCatalogue } from '../proposal-content-catalogue.js';
9
+ const proposalContent = {
10
+ name: 'proposal_content',
11
+ description: 'Modify proposal content (sections + blocks). All ops hit the same PATCH endpoint. ' +
12
+ 'Ops: upsert_section (add/replace a section by key), delete_section (remove by key), ' +
13
+ 'upsert_block (add/replace a block in a section), delete_block (remove a block), ' +
14
+ 'reorder_blocks (reorder blocks in a section — blockIds must be a full permutation), ' +
15
+ 'replace_all (replace all sections — use sparingly, for full regeneration only). ' +
16
+ 'Call describe_proposal_block_types first to learn what block types are available.',
17
+ inputSchema: z.object({
18
+ proposalId: z.string().uuid(),
19
+ op: z.enum([
20
+ 'upsert_section',
21
+ 'delete_section',
22
+ 'upsert_block',
23
+ 'delete_block',
24
+ 'reorder_blocks',
25
+ 'replace_all',
26
+ ]).describe('Which content operation to perform.'),
27
+ section: z
28
+ .record(z.unknown())
29
+ .optional()
30
+ .describe('For upsert_section: full section object {id, key, title, blocks: [...]}'),
31
+ key: z
32
+ .string()
33
+ .min(1)
34
+ .max(120)
35
+ .optional()
36
+ .describe('For delete_section: the section key to remove.'),
37
+ sectionKey: z
38
+ .string()
39
+ .min(1)
40
+ .max(120)
41
+ .optional()
42
+ .describe('For upsert_block, delete_block, reorder_blocks: the parent section key.'),
43
+ block: z
44
+ .record(z.unknown())
45
+ .optional()
46
+ .describe('For upsert_block: block object {id, type, ...per-type fields}.'),
47
+ blockId: z
48
+ .string()
49
+ .min(1)
50
+ .max(120)
51
+ .optional()
52
+ .describe('For delete_block: the block id to remove.'),
53
+ blockIds: z
54
+ .array(z.string().min(1).max(120))
55
+ .min(1)
56
+ .optional()
57
+ .describe('For reorder_blocks: every block id in the section, in the desired order.'),
58
+ sections: z
59
+ .array(z.record(z.unknown()))
60
+ .optional()
61
+ .describe('For replace_all: the complete sections array to replace with.'),
62
+ }),
63
+ handler: async (client, input) => {
64
+ let ops = [];
65
+ switch (input.op) {
66
+ case 'upsert_section':
67
+ if (!input.section)
68
+ throw new Error('section is required for upsert_section');
69
+ ops = [{ kind: 'upsertSection', section: input.section }];
70
+ break;
71
+ case 'delete_section':
72
+ if (!input.key)
73
+ throw new Error('key is required for delete_section');
74
+ ops = [{ kind: 'deleteSection', key: input.key }];
75
+ break;
76
+ case 'upsert_block':
77
+ if (!input.sectionKey)
78
+ throw new Error('sectionKey is required for upsert_block');
79
+ if (!input.block)
80
+ throw new Error('block is required for upsert_block');
81
+ ops = [{ kind: 'upsertBlock', sectionKey: input.sectionKey, block: input.block }];
82
+ break;
83
+ case 'delete_block':
84
+ if (!input.sectionKey)
85
+ throw new Error('sectionKey is required for delete_block');
86
+ if (!input.blockId)
87
+ throw new Error('blockId is required for delete_block');
88
+ ops = [{ kind: 'deleteBlock', sectionKey: input.sectionKey, blockId: input.blockId }];
89
+ break;
90
+ case 'reorder_blocks':
91
+ if (!input.sectionKey)
92
+ throw new Error('sectionKey is required for reorder_blocks');
93
+ if (!input.blockIds)
94
+ throw new Error('blockIds is required for reorder_blocks');
95
+ ops = [{ kind: 'reorderBlocks', sectionKey: input.sectionKey, blockIds: input.blockIds }];
96
+ break;
97
+ case 'replace_all':
98
+ if (!input.sections)
99
+ throw new Error('sections is required for replace_all');
100
+ ops = [{ kind: 'replaceAll', sections: input.sections }];
101
+ break;
102
+ }
103
+ return client.patch(`/crm/proposals/${input.proposalId}/content`, { ops });
104
+ },
105
+ };
106
+ const describeProposalBlockTypes = {
107
+ name: 'describe_proposal_block_types',
108
+ description: 'Return the catalogue of available proposal content block types: schemas, examples, ' +
109
+ 'when to use each, default section keys, and gotchas (e.g. iframe host allowlist). ' +
110
+ 'Call before drafting new content.',
111
+ inputSchema: z.object({}),
112
+ handler: async () => buildBlockCatalogue(),
113
+ };
114
+ export const proposalContentTools = [
115
+ proposalContent,
116
+ describeProposalBlockTypes,
117
+ ];
118
+ //# sourceMappingURL=proposal-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposal-content.js","sourceRoot":"","sources":["../../../src/tools/semantic/proposal-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Proposal semantic tools — operations with business logic that
3
+ * can't be expressed as generic CRUD.
4
+ */
5
+ import type { ToolDefinition } from '../types.js';
6
+ export declare const proposalSemanticTools: ToolDefinition[];
7
+ //# sourceMappingURL=proposals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposals.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/proposals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA6GlD,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAKjD,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Proposal semantic tools — operations with business logic that
3
+ * can't be expressed as generic CRUD.
4
+ */
5
+ import { z } from 'zod';
6
+ const proposalStatusEnum = z.enum([
7
+ 'draft', 'sent', 'viewed', 'signed', 'accepted', 'rejected', 'expired',
8
+ ]);
9
+ const pricingModelEnum = z.enum(['retainer', 'fixed_fee', 'ad_hoc', 'blended']);
10
+ const setProposalStatus = {
11
+ name: 'set_proposal_status',
12
+ description: 'Update a proposal status. Transitioning to `sent` activates the client viewing link (shareUrl). ' +
13
+ '`rejected` requires a `rejectionReason`.',
14
+ inputSchema: z.object({
15
+ id: z.string().uuid(),
16
+ status: proposalStatusEnum,
17
+ rejectionReason: z
18
+ .string()
19
+ .max(2000)
20
+ .nullable()
21
+ .optional()
22
+ .describe('Required when status is `rejected`.'),
23
+ }),
24
+ handler: async (client, input) => {
25
+ const { id, ...body } = input;
26
+ return client.patch(`/crm/proposals/${id}/status`, body);
27
+ },
28
+ };
29
+ const baseOptionFields = z.object({
30
+ title: z.string().min(1).max(255).describe('Display title for this option.'),
31
+ description: z.string().max(10_000).nullable().optional(),
32
+ pricingModel: pricingModelEnum,
33
+ currencyId: z.string().uuid().nullable().optional(),
34
+ monthlyAmount: z.number().nonnegative().nullable().optional().describe('Required for retainer.'),
35
+ oneTimeAmount: z.number().nonnegative().nullable().optional().describe('Required for fixed_fee or blended.'),
36
+ dayRate: z.number().nonnegative().nullable().optional().describe('Required for ad_hoc or blended.'),
37
+ discountPercentage: z.coerce.number().min(0).max(100).nullable().optional(),
38
+ discountAmount: z.coerce.number().nonnegative().nullable().optional(),
39
+ taxRate: z.coerce.number().min(0).max(100).nullable().optional(),
40
+ taxAmount: z.coerce.number().nonnegative().nullable().optional(),
41
+ termMonths: z.coerce.number().int().nonnegative().nullable().optional(),
42
+ noticePeriodWeeks: z.coerce.number().int().nonnegative().nullable().optional(),
43
+ recommended: z.boolean().optional().describe('Mark as recommended. At most one per proposal.'),
44
+ clauseSetKey: z.string().min(1).max(255).describe('Contract clause set identifier.'),
45
+ servicesSchedule: z.string().nullable().optional(),
46
+ });
47
+ const createProposalOption = {
48
+ name: 'create_proposal_option',
49
+ description: 'Create a new pricing option on a proposal. Pricing-model-specific amount fields ' +
50
+ 'are required: retainer needs monthlyAmount; fixed_fee needs oneTimeAmount; ad_hoc needs ' +
51
+ 'dayRate; blended needs both oneTimeAmount and dayRate. Setting recommended=true atomically ' +
52
+ 'clears it from any other option.',
53
+ inputSchema: baseOptionFields.extend({
54
+ proposalId: z.string().uuid(),
55
+ }),
56
+ handler: async (client, input) => {
57
+ const { proposalId, ...body } = input;
58
+ return client.post(`/crm/proposals/${proposalId}/options`, body);
59
+ },
60
+ };
61
+ const updateProposalOption = {
62
+ name: 'update_proposal_option',
63
+ description: 'Update a proposal option. Pricing-model refinement applies when pricingModel is sent. ' +
64
+ 'To mark as recommended, prefer set_recommended_option for clarity.',
65
+ inputSchema: z.object({
66
+ proposalId: z.string().uuid(),
67
+ optionId: z.string().uuid(),
68
+ title: z.string().min(1).max(255).optional(),
69
+ description: z.string().max(10_000).nullable().optional(),
70
+ pricingModel: pricingModelEnum.optional(),
71
+ currencyId: z.string().uuid().nullable().optional(),
72
+ monthlyAmount: z.coerce.number().nonnegative().nullable().optional(),
73
+ oneTimeAmount: z.coerce.number().nonnegative().nullable().optional(),
74
+ dayRate: z.coerce.number().nonnegative().nullable().optional(),
75
+ discountPercentage: z.coerce.number().min(0).max(100).nullable().optional(),
76
+ discountAmount: z.coerce.number().nonnegative().nullable().optional(),
77
+ taxRate: z.coerce.number().min(0).max(100).nullable().optional(),
78
+ taxAmount: z.coerce.number().nonnegative().nullable().optional(),
79
+ termMonths: z.coerce.number().int().nonnegative().nullable().optional(),
80
+ noticePeriodWeeks: z.coerce.number().int().nonnegative().nullable().optional(),
81
+ recommended: z.boolean().optional(),
82
+ clauseSetKey: z.string().min(1).max(255).optional(),
83
+ servicesSchedule: z.string().nullable().optional(),
84
+ }),
85
+ handler: async (client, input) => {
86
+ const { proposalId, optionId, ...body } = input;
87
+ return client.patch(`/crm/proposals/${proposalId}/options/${optionId}`, body);
88
+ },
89
+ };
90
+ const setRecommendedOption = {
91
+ name: 'set_recommended_option',
92
+ description: 'Mark one option as the recommended option. Atomically clears the flag from any other option.',
93
+ inputSchema: z.object({
94
+ proposalId: z.string().uuid(),
95
+ optionId: z.string().uuid(),
96
+ }),
97
+ handler: async (client, input) => client.patch(`/crm/proposals/${input.proposalId}/options/${input.optionId}`, {
98
+ recommended: true,
99
+ }),
100
+ };
101
+ export const proposalSemanticTools = [
102
+ setProposalStatus,
103
+ createProposalOption,
104
+ updateProposalOption,
105
+ setRecommendedOption,
106
+ ];
107
+ //# sourceMappingURL=proposals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proposals.js","sourceRoot":"","sources":["../../../src/tools/semantic/proposals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Task semantic tools — operations with business logic that
3
+ * can't be expressed as generic CRUD.
4
+ */
5
+ import type { ToolDefinition } from '../types.js';
6
+ export declare const taskSemanticTools: ToolDefinition[];
7
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/semantic/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAsJlD,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAI7C,CAAC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Task semantic tools — operations with business logic that
3
+ * can't be expressed as generic CRUD.
4
+ */
5
+ import { z } from 'zod';
6
+ const taskStatusEnum = z.enum([
7
+ 'backlog', 'todo', 'in_progress', 'in_review', 'blocked', 'done', 'cancelled',
8
+ ]);
9
+ const priorityMoscowEnum = z.enum(['must', 'should', 'could', 'wont']);
10
+ async function resolveMilestoneName(client, projectId, rawName) {
11
+ const needle = rawName.trim().toLowerCase();
12
+ if (!needle) {
13
+ throw new Error('milestoneName is empty after trimming. Pass a non-empty name or omit the field.');
14
+ }
15
+ const milestones = await client.get(`/projects/${projectId}/milestones`);
16
+ const list = Array.isArray(milestones) ? milestones : [];
17
+ const matches = list.filter((m) => m.name.toLowerCase().includes(needle));
18
+ const [first] = matches;
19
+ if (matches.length === 1 && first)
20
+ return first.id;
21
+ if (matches.length === 0) {
22
+ const available = list.map((m) => `"${m.name}"`).join(', ') || '(none)';
23
+ throw new Error(`No milestone matches "${rawName}" on project ${projectId}. Available: ${available}. Call list_milestones for ids, or omit milestoneName.`);
24
+ }
25
+ const names = matches.map((m) => `"${m.name}"`).join(', ');
26
+ throw new Error(`"${rawName}" matches ${matches.length} milestones on project ${projectId}: ${names}. Pass a more specific milestoneName or use milestoneId directly.`);
27
+ }
28
+ // ── Status state machine ────────────────────────────────────────────
29
+ async function stepTaskToDone(client, taskId) {
30
+ const path = `/tasks/${taskId}`;
31
+ const current = (await client.get(path));
32
+ const currentStatus = current.data?.status ??
33
+ current.status;
34
+ if (currentStatus === 'done')
35
+ return current;
36
+ const pathToInProgress = {
37
+ backlog: ['todo', 'in_progress'],
38
+ todo: ['in_progress'],
39
+ in_progress: [],
40
+ review: [],
41
+ production_ready: [],
42
+ blocked: ['in_progress'],
43
+ cancelled: ['backlog', 'todo', 'in_progress'],
44
+ };
45
+ const intermediates = currentStatus && currentStatus in pathToInProgress
46
+ ? pathToInProgress[currentStatus]
47
+ : [];
48
+ let last = current;
49
+ for (const step of intermediates ?? []) {
50
+ last = await client.put(path, { status: step });
51
+ }
52
+ return client.put(path, { status: 'done' });
53
+ }
54
+ // ── Tool definitions ────────────────────────────────────────────────
55
+ const createTask = {
56
+ name: 'create_task',
57
+ description: 'Create a new task. `title` is required. When `projectId` is supplied you should ALMOST ALWAYS ' +
58
+ 'also pass `milestoneId` (preferred) or `milestoneName` (fuzzy-matched); orphan tasks clutter the ' +
59
+ 'project view. Use query({ resource: "milestones", parentId }) first if you don\'t know the ids.',
60
+ inputSchema: z.object({
61
+ title: z.string().min(1).max(500),
62
+ description: z.string().max(10000).optional(),
63
+ projectId: z.string().uuid().optional(),
64
+ milestoneId: z.string().uuid().optional(),
65
+ milestoneName: z.string().min(1).max(200).optional()
66
+ .describe('Alternative to milestoneId. Case-insensitive substring match. Requires projectId.'),
67
+ parentTaskId: z.string().uuid().optional().describe('For subtasks.'),
68
+ assigneeId: z.string().uuid().optional(),
69
+ reporterId: z.string().uuid().optional(),
70
+ status: taskStatusEnum.optional().describe('Defaults to backlog.'),
71
+ priorityMoscow: priorityMoscowEnum.optional(),
72
+ storyPoints: z.coerce.number().int().min(0).max(100).optional(),
73
+ estimatedHours: z.coerce.number().min(0).optional(),
74
+ dueDate: z.string().optional().describe('ISO 8601.'),
75
+ startDate: z.string().optional().describe('ISO 8601.'),
76
+ tags: z.array(z.string()).optional(),
77
+ isBillable: z.boolean().optional(),
78
+ }),
79
+ handler: async (client, input) => {
80
+ const { projectId, milestoneName, milestoneId, ...rest } = input;
81
+ let resolvedMilestoneId = milestoneId;
82
+ if (!resolvedMilestoneId && milestoneName) {
83
+ if (!projectId) {
84
+ throw new Error('milestoneName requires projectId. Pass projectId or use milestoneId directly.');
85
+ }
86
+ resolvedMilestoneId = await resolveMilestoneName(client, projectId, milestoneName);
87
+ }
88
+ const body = resolvedMilestoneId ? { ...rest, milestoneId: resolvedMilestoneId } : rest;
89
+ if (projectId) {
90
+ return client.post(`/projects/${projectId}/tasks`, body);
91
+ }
92
+ return client.post('/tasks', body);
93
+ },
94
+ };
95
+ const completeTask = {
96
+ name: 'complete_task',
97
+ description: 'Mark a task as done. Handles the API status state machine automatically: ' +
98
+ 'walks through intermediate states (backlog->todo->in_progress->done). ' +
99
+ 'Already-done tasks are returned as-is.',
100
+ inputSchema: z.object({ id: z.string().uuid() }),
101
+ handler: async (client, input) => stepTaskToDone(client, input.id),
102
+ };
103
+ const regenerateClientView = {
104
+ name: 'regenerate_client_view',
105
+ description: 'Regenerate a task\'s client-view content from its internal title and description ' +
106
+ 'using an Anthropic call server-side. Refuses with 423 on locked tasks unless force: true.',
107
+ inputSchema: z.object({
108
+ id: z.string().uuid(),
109
+ force: z.boolean().optional().describe('Override clientViewLocked.'),
110
+ model: z.enum(['claude-haiku-4-5-20251001', 'claude-sonnet-4-6']).optional()
111
+ .describe('Anthropic model. Defaults to Haiku 4.5. Opus is rejected.'),
112
+ }),
113
+ handler: async (client, input) => {
114
+ const { id, ...rest } = input;
115
+ return client.post(`/tasks/${id}/regenerate-client-view`, rest);
116
+ },
117
+ };
118
+ export const taskSemanticTools = [
119
+ createTask,
120
+ completeTask,
121
+ regenerateClientView,
122
+ ];
123
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../src/tools/semantic/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dain-os/mcp-server",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
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": {
@@ -1,4 +0,0 @@
1
- import type { ToolDefinition } from './types.js';
2
- /** All four Cadence MCP tools. */
3
- export declare const cadenceTools: ToolDefinition[];
4
- //# sourceMappingURL=cadence.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cadence.d.ts","sourceRoot":"","sources":["../../src/tools/cadence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoRjD,kCAAkC;AAClC,eAAO,MAAM,YAAY,EAAE,cAAc,EAKxC,CAAC"}