@damper/mcp 0.4.0 → 0.5.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.
Files changed (3) hide show
  1. package/README.md +20 -0
  2. package/dist/index.js +74 -2
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -118,6 +118,26 @@ AI agents can store and retrieve project documentation to help future agents wor
118
118
 
119
119
  ⚠️ **Security:** Never include sensitive data (API keys, secrets, credentials, connection strings) in context uploads. Users can review and delete context from Settings → AI Context.
120
120
 
121
+ ### Project Settings
122
+
123
+ Configure agent-relevant project settings programmatically.
124
+
125
+ | Tool | Description |
126
+ |------|-------------|
127
+ | `get_project_settings` | View current settings (completion checklist, etc.) |
128
+ | `update_project_settings` | Configure completion checklist and other agent-relevant settings |
129
+
130
+ **Completion checklist workflow:**
131
+ 1. `update_project_settings` with `completionChecklist: ["All tests pass", "Build succeeds"]`
132
+ 2. Agents see the checklist when they call `start_task`
133
+ 3. Agents must confirm all items via `confirmations` when calling `complete_task`
134
+
135
+ ```
136
+ > View project settings
137
+ > Set completion checklist to require tests and builds
138
+ > Clear the completion checklist
139
+ ```
140
+
121
141
  ### Hierarchical Sections
122
142
 
123
143
  For monorepos or large projects, organize sections hierarchically:
package/dist/index.js CHANGED
@@ -41,7 +41,7 @@ async function api(method, path, body) {
41
41
  // Server
42
42
  const server = new McpServer({
43
43
  name: 'damper',
44
- version: '0.4.0',
44
+ version: '0.5.0',
45
45
  });
46
46
  // Output schemas
47
47
  const SubtaskProgressSchema = z.object({
@@ -722,7 +722,7 @@ server.registerTool('get_agent_instructions', {
722
722
  openWorldHint: false,
723
723
  },
724
724
  }, async ({ format = 'section' }) => {
725
- const lastModified = '2025-02-05';
725
+ const lastModified = '2025-02-06';
726
726
  const section = `## Task Management with Damper MCP
727
727
 
728
728
  > Last updated: ${lastModified}
@@ -753,6 +753,10 @@ This project uses Damper MCP for task tracking. **You MUST follow this workflow.
753
753
  - \`add_to_changelog\` - Manually add completed tasks to a changelog
754
754
  - \`publish_changelog\` - Publish with optional email notifications and Twitter posting
755
755
 
756
+ ### Project Settings
757
+ - \`get_project_settings\` - View current settings (completion checklist, etc.)
758
+ - \`update_project_settings\` - Configure completion checklist and other agent-relevant settings
759
+
756
760
  ### At Session End (MANDATORY)
757
761
  - ALWAYS call \`complete_task\` (if done) or \`abandon_task\` (if stopping early)
758
762
  - NEVER leave a started task without completing or abandoning it
@@ -1875,6 +1879,74 @@ server.registerTool('publish_changelog', {
1875
1879
  },
1876
1880
  };
1877
1881
  });
1882
+ // ==================== Project Settings Tools ====================
1883
+ // Tool: Get project settings
1884
+ server.registerTool('get_project_settings', {
1885
+ title: 'Get Project Settings',
1886
+ description: 'View current project settings relevant to agents (completion checklist, etc.).\n\n' +
1887
+ '**When to use**: Check what completion checklist items are configured, or verify settings before updating them.',
1888
+ inputSchema: z.object({}),
1889
+ outputSchema: z.object({
1890
+ completionChecklist: z.array(z.string()),
1891
+ }),
1892
+ annotations: {
1893
+ readOnlyHint: true,
1894
+ destructiveHint: false,
1895
+ idempotentHint: true,
1896
+ openWorldHint: false,
1897
+ },
1898
+ }, async () => {
1899
+ const data = await api('GET', '/api/agent/project/settings');
1900
+ if (!data.completionChecklist || data.completionChecklist.length === 0) {
1901
+ return {
1902
+ content: [{ type: 'text', text: 'No completion checklist configured.' }],
1903
+ structuredContent: data,
1904
+ };
1905
+ }
1906
+ const lines = data.completionChecklist.map((item, i) => `${i + 1}. ${item}`);
1907
+ return {
1908
+ content: [{ type: 'text', text: `Completion checklist:\n${lines.join('\n')}` }],
1909
+ structuredContent: data,
1910
+ };
1911
+ });
1912
+ // Tool: Update project settings
1913
+ server.registerTool('update_project_settings', {
1914
+ title: 'Update Project Settings',
1915
+ description: 'Configure agent-relevant project settings.\n\n' +
1916
+ '**completionChecklist**: Items agents must confirm before completing tasks. ' +
1917
+ 'Pass an empty array to clear the checklist.\n\n' +
1918
+ 'Example items: "All tests pass", "Build succeeds", "Migration created if schema changed"',
1919
+ inputSchema: z.object({
1920
+ completionChecklist: z.array(z.string()).optional()
1921
+ .describe('Checklist items agents must confirm when completing tasks. Pass [] to clear.'),
1922
+ }),
1923
+ outputSchema: z.object({
1924
+ completionChecklist: z.array(z.string()),
1925
+ message: z.string(),
1926
+ }),
1927
+ annotations: {
1928
+ readOnlyHint: false,
1929
+ destructiveHint: false,
1930
+ idempotentHint: true,
1931
+ openWorldHint: false,
1932
+ },
1933
+ }, async ({ completionChecklist }) => {
1934
+ const body = {};
1935
+ if (completionChecklist !== undefined)
1936
+ body.completionChecklist = completionChecklist;
1937
+ const result = await api('PATCH', '/api/agent/project/settings', body);
1938
+ if (result.completionChecklist.length === 0) {
1939
+ return {
1940
+ content: [{ type: 'text', text: 'Completion checklist cleared.' }],
1941
+ structuredContent: result,
1942
+ };
1943
+ }
1944
+ const lines = result.completionChecklist.map((item, i) => `${i + 1}. ${item}`);
1945
+ return {
1946
+ content: [{ type: 'text', text: `${result.message}\n${lines.join('\n')}` }],
1947
+ structuredContent: result,
1948
+ };
1949
+ });
1878
1950
  // Start
1879
1951
  async function main() {
1880
1952
  const transport = new StdioServerTransport();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@damper/mcp",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "MCP server for Damper task management",
5
5
  "author": "Damper <hello@usedamper.com>",
6
6
  "repository": {