@damper/mcp 0.6.1 → 0.7.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.
- package/dist/index.js +60 -3
- package/package.json +1 -1
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.
|
|
44
|
+
version: '0.6.0',
|
|
45
45
|
});
|
|
46
46
|
// Output schemas
|
|
47
47
|
const SubtaskProgressSchema = z.object({
|
|
@@ -736,7 +736,7 @@ server.registerTool('get_agent_instructions', {
|
|
|
736
736
|
openWorldHint: false,
|
|
737
737
|
},
|
|
738
738
|
}, async ({ format = 'section' }) => {
|
|
739
|
-
const lastModified = '
|
|
739
|
+
const lastModified = '2026-02-08';
|
|
740
740
|
const section = `## Task Management with Damper MCP
|
|
741
741
|
|
|
742
742
|
> Last updated: ${lastModified}
|
|
@@ -753,6 +753,7 @@ This project uses Damper MCP for task tracking. **You MUST follow this workflow.
|
|
|
753
753
|
4. If working on a task: \`start_task\` to lock it
|
|
754
754
|
|
|
755
755
|
### While Working
|
|
756
|
+
- **Do NOT commit or complete tasks without explicit user confirmation** - Always ask the user before running \`git commit\` or calling \`complete_task\`
|
|
756
757
|
- \`add_commit\` after each commit with hash and message
|
|
757
758
|
- \`add_note\` for decisions: "Decision: chose X because Y"
|
|
758
759
|
- \`update_subtask\` to mark subtask progress
|
|
@@ -772,7 +773,8 @@ This project uses Damper MCP for task tracking. **You MUST follow this workflow.
|
|
|
772
773
|
- \`update_project_settings\` - Configure completion checklist and other agent-relevant settings
|
|
773
774
|
|
|
774
775
|
### At Session End (MANDATORY)
|
|
775
|
-
-
|
|
776
|
+
- **Ask the user for confirmation before committing or completing a task** - Never autonomously commit code or call \`complete_task\`
|
|
777
|
+
- Once user confirms, call \`complete_task\` (if done) or \`abandon_task\` (if stopping early)
|
|
776
778
|
- NEVER leave a started task without completing or abandoning it
|
|
777
779
|
- If the project has a **completion checklist** (shown in \`start_task\` response), you MUST pass all items as \`confirmations\` when calling \`complete_task\`
|
|
778
780
|
- If you learned something about the codebase, consider updating project context
|
|
@@ -1972,6 +1974,61 @@ server.registerTool('update_project_settings', {
|
|
|
1972
1974
|
structuredContent: result,
|
|
1973
1975
|
};
|
|
1974
1976
|
});
|
|
1977
|
+
// ==================== Public Pages ====================
|
|
1978
|
+
server.registerTool('open_public_page', {
|
|
1979
|
+
title: 'Open Public Page',
|
|
1980
|
+
description: 'Get the public URL for a project page (roadmap, feedback, changelog, or a specific roadmap item). ' +
|
|
1981
|
+
'Use this to share links with users or open pages in a browser.\n\n' +
|
|
1982
|
+
'**IMPORTANT:** NEVER guess or construct public page URLs yourself. Always call this tool to get the correct URL.\n\n' +
|
|
1983
|
+
'**Pages:** roadmap, feedback, changelog, roadmap_item\n' +
|
|
1984
|
+
'**roadmap_item** requires `itemId` parameter.',
|
|
1985
|
+
inputSchema: z.object({
|
|
1986
|
+
page: z.enum(['roadmap', 'feedback', 'changelog', 'roadmap_item'])
|
|
1987
|
+
.describe('Which public page to get the URL for'),
|
|
1988
|
+
itemId: z.string().optional()
|
|
1989
|
+
.describe('Roadmap item ID (required when page is "roadmap_item")'),
|
|
1990
|
+
}),
|
|
1991
|
+
outputSchema: z.object({
|
|
1992
|
+
url: z.string(),
|
|
1993
|
+
enabled: z.boolean(),
|
|
1994
|
+
note: z.string().optional(),
|
|
1995
|
+
}),
|
|
1996
|
+
annotations: {
|
|
1997
|
+
readOnlyHint: true,
|
|
1998
|
+
destructiveHint: false,
|
|
1999
|
+
idempotentHint: true,
|
|
2000
|
+
openWorldHint: false,
|
|
2001
|
+
},
|
|
2002
|
+
}, async ({ page, itemId }) => {
|
|
2003
|
+
if (page === 'roadmap_item' && !itemId) {
|
|
2004
|
+
return {
|
|
2005
|
+
content: [{ type: 'text', text: 'Error: itemId is required when page is "roadmap_item"' }],
|
|
2006
|
+
isError: true,
|
|
2007
|
+
};
|
|
2008
|
+
}
|
|
2009
|
+
const data = await api('GET', '/api/agent/project/public-urls');
|
|
2010
|
+
let url;
|
|
2011
|
+
let enabled;
|
|
2012
|
+
if (page === 'roadmap_item') {
|
|
2013
|
+
url = data.roadmapItemUrlTemplate.replace('{itemId}', itemId);
|
|
2014
|
+
enabled = data.pages.roadmap.enabled;
|
|
2015
|
+
}
|
|
2016
|
+
else {
|
|
2017
|
+
const pageData = data.pages[page];
|
|
2018
|
+
url = pageData.url;
|
|
2019
|
+
enabled = pageData.enabled;
|
|
2020
|
+
}
|
|
2021
|
+
const note = !enabled
|
|
2022
|
+
? `Note: This page is not currently enabled. The URL will work once the project owner enables it in settings.`
|
|
2023
|
+
: undefined;
|
|
2024
|
+
const parts = [url];
|
|
2025
|
+
if (note)
|
|
2026
|
+
parts.push(note);
|
|
2027
|
+
return {
|
|
2028
|
+
content: [{ type: 'text', text: parts.join('\n\n') }],
|
|
2029
|
+
structuredContent: { url, enabled, ...(note ? { note } : {}) },
|
|
2030
|
+
};
|
|
2031
|
+
});
|
|
1975
2032
|
// Start
|
|
1976
2033
|
async function main() {
|
|
1977
2034
|
const transport = new StdioServerTransport();
|