paput-mcp 2.3.0 → 2.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.
- package/README.md +151 -93
- package/dist/check-http.js +27 -0
- package/dist/check-http.js.map +1 -0
- package/dist/cli/index.js +6 -6
- package/dist/cli/setup-ai.js +124 -126
- package/dist/cli/setup-ai.js.map +1 -1
- package/dist/handlers/add-knowledge-candidates/handler.js +11 -9
- package/dist/handlers/add-knowledge-candidates/handler.js.map +1 -1
- package/dist/handlers/add-knowledge-candidates/tool.js +4 -4
- package/dist/handlers/add-knowledge-candidates/tool.js.map +1 -1
- package/dist/handlers/cache-status/tool.js +1 -1
- package/dist/handlers/cache-status/tool.js.map +1 -1
- package/dist/handlers/create-memo/handler.js +25 -14
- package/dist/handlers/create-memo/handler.js.map +1 -1
- package/dist/handlers/create-memo/tool.js +6 -6
- package/dist/handlers/create-memo/tool.js.map +1 -1
- package/dist/handlers/create-note/handler.js +19 -9
- package/dist/handlers/create-note/handler.js.map +1 -1
- package/dist/handlers/create-note/tool.js +4 -4
- package/dist/handlers/create-note/tool.js.map +1 -1
- package/dist/handlers/delete-skill-sheet-project/handler.js +7 -2
- package/dist/handlers/delete-skill-sheet-project/handler.js.map +1 -1
- package/dist/handlers/delete-skill-sheet-project/tool.js +2 -2
- package/dist/handlers/delete-skill-sheet-project/tool.js.map +1 -1
- package/dist/handlers/discard-pending-candidate/handler.js +9 -7
- package/dist/handlers/discard-pending-candidate/handler.js.map +1 -1
- package/dist/handlers/discard-pending-candidate/tool.js +6 -3
- package/dist/handlers/discard-pending-candidate/tool.js.map +1 -1
- package/dist/handlers/get-categories/handler.js +4 -4
- package/dist/handlers/get-categories/handler.js.map +1 -1
- package/dist/handlers/get-categories/tool.js +1 -1
- package/dist/handlers/get-categories/tool.js.map +1 -1
- package/dist/handlers/get-memo/handler.js +11 -11
- package/dist/handlers/get-memo/handler.js.map +1 -1
- package/dist/handlers/get-memo/tool.js +2 -2
- package/dist/handlers/get-memo/tool.js.map +1 -1
- package/dist/handlers/get-note/handler.js +16 -16
- package/dist/handlers/get-note/handler.js.map +1 -1
- package/dist/handlers/get-note/tool.js +2 -2
- package/dist/handlers/get-note/tool.js.map +1 -1
- package/dist/handlers/get-session-transcript/handler.js +3 -3
- package/dist/handlers/get-session-transcript/handler.js.map +1 -1
- package/dist/handlers/get-session-transcript/tool.js +4 -4
- package/dist/handlers/get-session-transcript/tool.js.map +1 -1
- package/dist/handlers/get-skill-sheet/handler.js +29 -29
- package/dist/handlers/get-skill-sheet/handler.js.map +1 -1
- package/dist/handlers/get-skill-sheet/tool.js +1 -1
- package/dist/handlers/get-skill-sheet/tool.js.map +1 -1
- package/dist/handlers/list-pending-candidates/tool.js +2 -2
- package/dist/handlers/list-pending-candidates/tool.js.map +1 -1
- package/dist/handlers/save-pending-candidate/handler.js +12 -9
- package/dist/handlers/save-pending-candidate/handler.js.map +1 -1
- package/dist/handlers/save-pending-candidate/tool.js +6 -6
- package/dist/handlers/save-pending-candidate/tool.js.map +1 -1
- package/dist/handlers/scan-sessions/tool.js +3 -3
- package/dist/handlers/scan-sessions/tool.js.map +1 -1
- package/dist/handlers/search-memo/handler.js +8 -8
- package/dist/handlers/search-memo/handler.js.map +1 -1
- package/dist/handlers/search-memo/tool.js +8 -8
- package/dist/handlers/search-memo/tool.js.map +1 -1
- package/dist/handlers/search-notes/handler.js +9 -9
- package/dist/handlers/search-notes/handler.js.map +1 -1
- package/dist/handlers/search-notes/tool.js +5 -5
- package/dist/handlers/search-notes/tool.js.map +1 -1
- package/dist/handlers/sync-remote-memos/handler.js +9 -5
- package/dist/handlers/sync-remote-memos/handler.js.map +1 -1
- package/dist/handlers/sync-remote-memos/tool.js +3 -3
- package/dist/handlers/sync-remote-memos/tool.js.map +1 -1
- package/dist/handlers/update-memo/handler.js +22 -11
- package/dist/handlers/update-memo/handler.js.map +1 -1
- package/dist/handlers/update-memo/tool.js +8 -8
- package/dist/handlers/update-memo/tool.js.map +1 -1
- package/dist/handlers/update-note/handler.js +23 -13
- package/dist/handlers/update-note/handler.js.map +1 -1
- package/dist/handlers/update-note/tool.js +5 -5
- package/dist/handlers/update-note/tool.js.map +1 -1
- package/dist/handlers/update-skill-sheet-basic-info/handler.js +6 -1
- package/dist/handlers/update-skill-sheet-basic-info/handler.js.map +1 -1
- package/dist/handlers/update-skill-sheet-basic-info/tool.js +5 -5
- package/dist/handlers/update-skill-sheet-basic-info/tool.js.map +1 -1
- package/dist/handlers/update-skill-sheet-self-pr/handler.js +6 -1
- package/dist/handlers/update-skill-sheet-self-pr/handler.js.map +1 -1
- package/dist/handlers/update-skill-sheet-self-pr/tool.js +2 -2
- package/dist/handlers/update-skill-sheet-self-pr/tool.js.map +1 -1
- package/dist/handlers/update-skill-sheet-skills/handler.js +7 -2
- package/dist/handlers/update-skill-sheet-skills/handler.js.map +1 -1
- package/dist/handlers/update-skill-sheet-skills/tool.js +7 -7
- package/dist/handlers/update-skill-sheet-skills/tool.js.map +1 -1
- package/dist/handlers/upsert-skill-sheet-project/handler.js +5 -5
- package/dist/handlers/upsert-skill-sheet-project/handler.js.map +1 -1
- package/dist/handlers/upsert-skill-sheet-project/tool.js +16 -16
- package/dist/handlers/upsert-skill-sheet-project/tool.js.map +1 -1
- package/dist/http.js +149 -0
- package/dist/http.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/tool-input.js +97 -80
- package/dist/schemas/tool-input.js.map +1 -1
- package/dist/server.js +20 -21
- package/dist/server.js.map +1 -1
- package/dist/services/api/client.js +9 -4
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/api/memo.js +3 -3
- package/dist/services/api/memo.js.map +1 -1
- package/dist/services/api/note.js +3 -3
- package/dist/services/api/note.js.map +1 -1
- package/dist/services/api/skill-sheet.js +2 -2
- package/dist/services/api/skill-sheet.js.map +1 -1
- package/dist/services/local-cache/index.js +2 -2
- package/dist/services/local-cache/index.js.map +1 -1
- package/dist/tool.js +8 -8
- package/dist/tool.js.map +1 -1
- package/dist/types/constants.js +12 -12
- package/dist/types/constants.js.map +1 -1
- package/docs/directory-submission.md +91 -0
- package/docs/privacy-policy.md +60 -0
- package/docs/tools.md +59 -0
- package/docs/usage-examples.md +83 -0
- package/package.json +6 -1
|
@@ -6,7 +6,7 @@ export async function handler(params, apiClient) {
|
|
|
6
6
|
content: [
|
|
7
7
|
{
|
|
8
8
|
type: 'text',
|
|
9
|
-
text: '
|
|
9
|
+
text: 'Project information is incomplete',
|
|
10
10
|
},
|
|
11
11
|
],
|
|
12
12
|
isError: true,
|
|
@@ -18,22 +18,22 @@ export async function handler(params, apiClient) {
|
|
|
18
18
|
if (id) {
|
|
19
19
|
await updateSkillSheetProject(apiClient, { ...project, id });
|
|
20
20
|
return {
|
|
21
|
-
structuredContent: { action: 'updated', id },
|
|
21
|
+
structuredContent: { success: true, action: 'updated', id, project },
|
|
22
22
|
content: [
|
|
23
23
|
{
|
|
24
24
|
type: 'text',
|
|
25
|
-
text:
|
|
25
|
+
text: `Project was updated: ${id}`,
|
|
26
26
|
},
|
|
27
27
|
],
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
const response = await addSkillSheetProject(apiClient, project);
|
|
31
31
|
return {
|
|
32
|
-
structuredContent: { action: 'created', project: response },
|
|
32
|
+
structuredContent: { success: true, action: 'created', project: response },
|
|
33
33
|
content: [
|
|
34
34
|
{
|
|
35
35
|
type: 'text',
|
|
36
|
-
text:
|
|
36
|
+
text: `Project was added: ${response.title} (ID: ${response.id})`,
|
|
37
37
|
},
|
|
38
38
|
],
|
|
39
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAA2C,EAC3C,SAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,55 +2,55 @@ import { handler } from './handler.js';
|
|
|
2
2
|
export const upsertSkillSheetProjectTool = {
|
|
3
3
|
definition: {
|
|
4
4
|
name: 'paput_upsert_skill_sheet_project',
|
|
5
|
-
description: 'PaPut
|
|
5
|
+
description: 'Add or update a PaPut skill sheet project. If an ID is provided, update that project; otherwise update an exact title match or create a new project.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
9
9
|
id: {
|
|
10
10
|
type: 'number',
|
|
11
|
-
description: '
|
|
11
|
+
description: 'Project ID to update. Omit when creating a new project.',
|
|
12
12
|
},
|
|
13
13
|
type: {
|
|
14
14
|
type: 'number',
|
|
15
|
-
description: '
|
|
15
|
+
description: 'Project type: 1 business, 2 personal',
|
|
16
16
|
},
|
|
17
17
|
title: {
|
|
18
18
|
type: 'string',
|
|
19
|
-
description: '
|
|
19
|
+
description: 'Project title',
|
|
20
20
|
},
|
|
21
21
|
start_period: {
|
|
22
22
|
type: 'string',
|
|
23
|
-
description: '
|
|
23
|
+
description: 'Start period in YYYY-MM format',
|
|
24
24
|
},
|
|
25
25
|
end_period: {
|
|
26
26
|
type: 'string',
|
|
27
|
-
description: '
|
|
27
|
+
description: 'End period in YYYY-MM format',
|
|
28
28
|
},
|
|
29
29
|
description: {
|
|
30
30
|
type: 'string',
|
|
31
|
-
description: '
|
|
31
|
+
description: 'Project description',
|
|
32
32
|
},
|
|
33
33
|
role: {
|
|
34
34
|
type: 'string',
|
|
35
|
-
description: '
|
|
35
|
+
description: 'Role',
|
|
36
36
|
},
|
|
37
37
|
scale: {
|
|
38
38
|
type: 'string',
|
|
39
|
-
description: '
|
|
39
|
+
description: 'Team or project scale',
|
|
40
40
|
},
|
|
41
41
|
technologies: {
|
|
42
42
|
type: 'array',
|
|
43
|
-
description: '
|
|
43
|
+
description: 'Technologies used',
|
|
44
44
|
items: {
|
|
45
45
|
type: 'object',
|
|
46
46
|
properties: {
|
|
47
47
|
id: {
|
|
48
48
|
type: 'number',
|
|
49
|
-
description: '
|
|
49
|
+
description: 'Technology ID for an existing technology',
|
|
50
50
|
},
|
|
51
51
|
name: {
|
|
52
52
|
type: 'string',
|
|
53
|
-
description: '
|
|
53
|
+
description: 'Technology name',
|
|
54
54
|
},
|
|
55
55
|
},
|
|
56
56
|
required: ['name'],
|
|
@@ -58,24 +58,24 @@ export const upsertSkillSheetProjectTool = {
|
|
|
58
58
|
},
|
|
59
59
|
processes: {
|
|
60
60
|
type: 'array',
|
|
61
|
-
description: '
|
|
61
|
+
description: 'Development process IDs: 1 requirements, 2 basic design, 3 detailed design, 4 implementation, 5 testing, 6 maintenance',
|
|
62
62
|
items: {
|
|
63
63
|
type: 'number',
|
|
64
64
|
},
|
|
65
65
|
},
|
|
66
66
|
memos: {
|
|
67
67
|
type: 'array',
|
|
68
|
-
description: '
|
|
68
|
+
description: 'Related memos',
|
|
69
69
|
items: {
|
|
70
70
|
type: 'object',
|
|
71
71
|
properties: {
|
|
72
72
|
id: {
|
|
73
73
|
type: 'number',
|
|
74
|
-
description: '
|
|
74
|
+
description: 'Memo ID',
|
|
75
75
|
},
|
|
76
76
|
title: {
|
|
77
77
|
type: 'string',
|
|
78
|
-
description: '
|
|
78
|
+
description: 'Memo title',
|
|
79
79
|
},
|
|
80
80
|
},
|
|
81
81
|
required: ['id', 'title'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,sJAAsJ;QACxJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yDAAyD;iBAC5D;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,eAAe;iBAC7B;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,MAAM;iBACpB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,mBAAmB;oBAChC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,0CAA0C;6BACxD;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iBAAiB;6BAC/B;yBACF;wBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;qBACnB;iBACF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,wHAAwH;oBAC1H,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,eAAe;oBAC5B,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,SAAS;6BACvB;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,YAAY;6BAC1B;yBACF;wBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC1B;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,aAAa;gBACb,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,WAAW;gBACX,OAAO;aACR;SACF;KACF;IACD,OAAO;CACR,CAAC"}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createServer, } from 'node:http';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
5
|
+
import { createMcpServer } from './server.js';
|
|
6
|
+
const OAUTH_SCOPES = ['paput.read', 'paput.write'];
|
|
7
|
+
export async function startHttpMcpServer(options = {}) {
|
|
8
|
+
const endpoint = options.endpoint ?? '/';
|
|
9
|
+
const port = options.port ?? Number(process.env.PORT ?? 3000);
|
|
10
|
+
const host = options.host ?? process.env.HOST;
|
|
11
|
+
const apiUrl = options.apiUrl ?? process.env.PAPUT_API_URL ?? 'https://api.paput.io';
|
|
12
|
+
const apiOrigin = new URL(apiUrl).origin;
|
|
13
|
+
const oauthRequired = options.oauthRequired ?? (!options.apiKey && !process.env.PAPUT_API_KEY);
|
|
14
|
+
const httpServer = createServer(async (req, res) => {
|
|
15
|
+
const requestUrl = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
|
|
16
|
+
const publicOrigin = getPublicOrigin(req, requestUrl);
|
|
17
|
+
const resourceUrl = getResourceUrl(publicOrigin, endpoint);
|
|
18
|
+
const protectedResourceMetadataUrl = getProtectedResourceMetadataUrl(publicOrigin, endpoint);
|
|
19
|
+
if (requestUrl.pathname === '/healthz') {
|
|
20
|
+
res.writeHead(200, { 'content-type': 'application/json' });
|
|
21
|
+
res.end(JSON.stringify({ ok: true }));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (requestUrl.pathname === '/.well-known/oauth-protected-resource') {
|
|
25
|
+
sendJson(res, 200, {
|
|
26
|
+
resource: resourceUrl,
|
|
27
|
+
authorization_servers: [apiOrigin],
|
|
28
|
+
scopes_supported: OAUTH_SCOPES,
|
|
29
|
+
bearer_methods_supported: ['header'],
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (requestUrl.pathname === '/.well-known/oauth-authorization-server') {
|
|
34
|
+
res.writeHead(307, {
|
|
35
|
+
location: `${apiOrigin}/.well-known/oauth-authorization-server`,
|
|
36
|
+
});
|
|
37
|
+
res.end();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (requestUrl.pathname !== endpoint) {
|
|
41
|
+
sendJsonRpcError(res, 404, -32000, 'Not found');
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (req.method !== 'POST') {
|
|
45
|
+
res.setHeader('allow', 'POST');
|
|
46
|
+
sendJsonRpcError(res, 405, -32000, 'Method not allowed.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const accessToken = extractBearerToken(req.headers.authorization);
|
|
50
|
+
if (oauthRequired && !accessToken) {
|
|
51
|
+
sendOAuthChallenge(res, protectedResourceMetadataUrl);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const mcpServer = createMcpServer({ ...options, accessToken });
|
|
55
|
+
const transport = new StreamableHTTPServerTransport({
|
|
56
|
+
sessionIdGenerator: undefined,
|
|
57
|
+
});
|
|
58
|
+
transport.onerror = (error) => {
|
|
59
|
+
console.error('MCP HTTP transport error:', error);
|
|
60
|
+
};
|
|
61
|
+
res.on('close', () => {
|
|
62
|
+
void transport.close().catch((error) => {
|
|
63
|
+
console.error('Failed to close MCP HTTP transport:', error);
|
|
64
|
+
});
|
|
65
|
+
void mcpServer.close().catch((error) => {
|
|
66
|
+
console.error('Failed to close MCP server:', error);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
try {
|
|
70
|
+
await mcpServer.connect(transport);
|
|
71
|
+
await transport.handleRequest(req, res);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error('Error handling MCP HTTP request:', error);
|
|
75
|
+
if (!res.headersSent) {
|
|
76
|
+
sendJsonRpcError(res, 500, -32603, 'Internal server error');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
await new Promise((resolve, reject) => {
|
|
81
|
+
httpServer.once('error', reject);
|
|
82
|
+
httpServer.listen(port, host, () => {
|
|
83
|
+
httpServer.off('error', reject);
|
|
84
|
+
resolve();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
return httpServer;
|
|
88
|
+
}
|
|
89
|
+
function getPublicOrigin(req, requestUrl) {
|
|
90
|
+
const protoHeader = req.headers['x-forwarded-proto'];
|
|
91
|
+
const forwardedProto = Array.isArray(protoHeader)
|
|
92
|
+
? protoHeader[0]
|
|
93
|
+
: protoHeader;
|
|
94
|
+
const scheme = forwardedProto ?? requestUrl.protocol.replace(':', '');
|
|
95
|
+
return `${scheme}://${req.headers.host ?? 'localhost'}`;
|
|
96
|
+
}
|
|
97
|
+
function getResourceUrl(publicOrigin, endpoint) {
|
|
98
|
+
return endpoint === '/' ? publicOrigin : `${publicOrigin}${endpoint}`;
|
|
99
|
+
}
|
|
100
|
+
function getProtectedResourceMetadataUrl(publicOrigin, endpoint) {
|
|
101
|
+
return endpoint === '/'
|
|
102
|
+
? `${publicOrigin}/.well-known/oauth-protected-resource`
|
|
103
|
+
: `${publicOrigin}/.well-known/oauth-protected-resource${endpoint}`;
|
|
104
|
+
}
|
|
105
|
+
function extractBearerToken(authorizationHeader) {
|
|
106
|
+
if (!authorizationHeader?.toLowerCase().startsWith('bearer ')) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
const token = authorizationHeader.slice('bearer '.length).trim();
|
|
110
|
+
return token || undefined;
|
|
111
|
+
}
|
|
112
|
+
function sendOAuthChallenge(res, resourceMetadataUrl) {
|
|
113
|
+
res.writeHead(401, {
|
|
114
|
+
'content-type': 'application/json',
|
|
115
|
+
'www-authenticate': `Bearer resource_metadata="${resourceMetadataUrl}", scope="${OAUTH_SCOPES.join(' ')}"`,
|
|
116
|
+
});
|
|
117
|
+
res.end(JSON.stringify({
|
|
118
|
+
error: 'unauthorized',
|
|
119
|
+
error_description: 'OAuth authentication is required.',
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
function sendJson(res, statusCode, body) {
|
|
123
|
+
res.writeHead(statusCode, { 'content-type': 'application/json' });
|
|
124
|
+
res.end(JSON.stringify(body));
|
|
125
|
+
}
|
|
126
|
+
function sendJsonRpcError(res, statusCode, code, message) {
|
|
127
|
+
res.writeHead(statusCode, { 'content-type': 'application/json' });
|
|
128
|
+
res.end(JSON.stringify({
|
|
129
|
+
jsonrpc: '2.0',
|
|
130
|
+
error: { code, message },
|
|
131
|
+
id: null,
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
135
|
+
startHttpMcpServer()
|
|
136
|
+
.then((server) => {
|
|
137
|
+
const address = server.address();
|
|
138
|
+
const listeningOn = typeof address === 'object' && address
|
|
139
|
+
? `${address.address}:${address.port}`
|
|
140
|
+
: String(address);
|
|
141
|
+
console.error(`PaPut MCP Streamable HTTP server listening on ${listeningOn}`);
|
|
142
|
+
console.error('MCP endpoint: /');
|
|
143
|
+
})
|
|
144
|
+
.catch((error) => {
|
|
145
|
+
console.error('Unexpected error:', error);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -2,50 +2,56 @@ import { z } from 'zod';
|
|
|
2
2
|
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
3
3
|
const emptySchema = z.object({});
|
|
4
4
|
const memoCategorySchema = z.object({
|
|
5
|
-
id: z
|
|
6
|
-
|
|
5
|
+
id: z
|
|
6
|
+
.number()
|
|
7
|
+
.describe('Existing category ID. Omit for a new category.')
|
|
8
|
+
.optional(),
|
|
9
|
+
name: z.string().describe('Category name'),
|
|
7
10
|
});
|
|
8
11
|
const projectReferenceSchema = z.object({
|
|
9
12
|
id: z.number(),
|
|
10
13
|
title: z.string().optional(),
|
|
11
14
|
});
|
|
12
15
|
const skillCategorySchema = z.object({
|
|
13
|
-
id: z.number().describe('
|
|
14
|
-
name: z.string().describe('
|
|
16
|
+
id: z.number().describe('Category ID'),
|
|
17
|
+
name: z.string().describe('Category name'),
|
|
15
18
|
});
|
|
16
19
|
const skillSchema = z.object({
|
|
17
20
|
category: skillCategorySchema,
|
|
18
21
|
category_type: z
|
|
19
22
|
.number()
|
|
20
|
-
.describe('
|
|
21
|
-
level: z.string().describe('
|
|
22
|
-
years: z.number().describe('
|
|
23
|
+
.describe('Category type: 1 language, 2 framework, 3 database, 4 infrastructure'),
|
|
24
|
+
level: z.string().describe('Skill level: A, B, C, D, or E'),
|
|
25
|
+
years: z.number().describe('Years of experience'),
|
|
23
26
|
});
|
|
24
27
|
const technologySchema = z.object({
|
|
25
|
-
id: z
|
|
26
|
-
|
|
28
|
+
id: z
|
|
29
|
+
.number()
|
|
30
|
+
.describe('Technology ID for an existing technology')
|
|
31
|
+
.optional(),
|
|
32
|
+
name: z.string().describe('Technology name'),
|
|
27
33
|
});
|
|
28
34
|
const skillSheetMemoSchema = z.object({
|
|
29
|
-
id: z.number().describe('
|
|
30
|
-
title: z.string().describe('
|
|
35
|
+
id: z.number().describe('Memo ID'),
|
|
36
|
+
title: z.string().describe('Memo title'),
|
|
31
37
|
});
|
|
32
38
|
const skillSheetProjectSchema = z.object({
|
|
33
39
|
id: z
|
|
34
40
|
.number()
|
|
35
|
-
.describe('
|
|
41
|
+
.describe('Project ID to update. Omit when creating a new project.')
|
|
36
42
|
.optional(),
|
|
37
|
-
type: z.number().describe('
|
|
38
|
-
title: z.string().describe('
|
|
39
|
-
start_period: z.string().describe('
|
|
40
|
-
end_period: z.string().describe('
|
|
41
|
-
description: z.string().describe('
|
|
42
|
-
role: z.string().describe('
|
|
43
|
-
scale: z.string().describe('
|
|
44
|
-
technologies: z.array(technologySchema).describe('
|
|
43
|
+
type: z.number().describe('Project type: 1 business, 2 personal'),
|
|
44
|
+
title: z.string().describe('Project title'),
|
|
45
|
+
start_period: z.string().describe('Start period in YYYY-MM format'),
|
|
46
|
+
end_period: z.string().describe('End period in YYYY-MM format').optional(),
|
|
47
|
+
description: z.string().describe('Project description'),
|
|
48
|
+
role: z.string().describe('Role'),
|
|
49
|
+
scale: z.string().describe('Team or project scale'),
|
|
50
|
+
technologies: z.array(technologySchema).describe('Technologies used'),
|
|
45
51
|
processes: z
|
|
46
52
|
.array(z.number())
|
|
47
|
-
.describe('
|
|
48
|
-
memos: z.array(skillSheetMemoSchema).describe('
|
|
53
|
+
.describe('Development process IDs: 1 requirements, 2 basic design, 3 detailed design, 4 implementation, 5 testing, 6 maintenance'),
|
|
54
|
+
memos: z.array(skillSheetMemoSchema).describe('Related memos'),
|
|
49
55
|
});
|
|
50
56
|
const knowledgeCandidateSchema = z.object({
|
|
51
57
|
title: z.string(),
|
|
@@ -56,145 +62,156 @@ const knowledgeCandidateSchema = z.object({
|
|
|
56
62
|
});
|
|
57
63
|
const toolInputSchemas = {
|
|
58
64
|
paput_create_memo: z.object({
|
|
59
|
-
title: z.string().describe('
|
|
60
|
-
body: z.string().describe('
|
|
61
|
-
is_public: z
|
|
65
|
+
title: z.string().describe('Memo title'),
|
|
66
|
+
body: z.string().describe('Memo body'),
|
|
67
|
+
is_public: z
|
|
68
|
+
.boolean()
|
|
69
|
+
.default(false)
|
|
70
|
+
.describe('Whether to publish the memo'),
|
|
62
71
|
created_at: z
|
|
63
72
|
.string()
|
|
64
|
-
.describe('
|
|
73
|
+
.describe('Memo creation timestamp in ISO 8601 format, for example 2026-05-30T12:34:56Z')
|
|
65
74
|
.optional(),
|
|
66
|
-
categories: z.array(z.string()).describe('
|
|
75
|
+
categories: z.array(z.string()).describe('Memo categories').optional(),
|
|
67
76
|
}),
|
|
68
77
|
paput_search_memo: z.object({
|
|
69
|
-
word: z.string().describe('
|
|
70
|
-
category_id: z.number().describe('
|
|
71
|
-
ids: z.array(z.number()).describe('
|
|
72
|
-
date: z.string().describe('
|
|
73
|
-
is_public: z.boolean().describe('
|
|
74
|
-
page: z.number().describe('
|
|
75
|
-
limit: z.number().describe('
|
|
78
|
+
word: z.string().describe('Search keyword').optional(),
|
|
79
|
+
category_id: z.number().describe('Category ID').optional(),
|
|
80
|
+
ids: z.array(z.number()).describe('Memo IDs').optional(),
|
|
81
|
+
date: z.string().describe('Date in YYYY-MM-DD format').optional(),
|
|
82
|
+
is_public: z.boolean().describe('Visibility filter').optional(),
|
|
83
|
+
page: z.number().describe('Page number').optional(),
|
|
84
|
+
limit: z.number().describe('Number of items to return').optional(),
|
|
76
85
|
}),
|
|
77
86
|
paput_get_memo: z.object({
|
|
78
|
-
id: z.number().describe('
|
|
87
|
+
id: z.number().describe('Memo ID'),
|
|
79
88
|
}),
|
|
80
89
|
paput_update_memo: z.object({
|
|
81
|
-
id: z.number().describe('
|
|
82
|
-
title: z.string().describe('
|
|
83
|
-
body: z.string().describe('
|
|
84
|
-
is_public: z.boolean().describe('
|
|
85
|
-
categories: z
|
|
86
|
-
.array(memoCategorySchema)
|
|
87
|
-
.describe('カテゴリーの配列')
|
|
88
|
-
.optional(),
|
|
90
|
+
id: z.number().describe('Memo ID'),
|
|
91
|
+
title: z.string().describe('Memo title'),
|
|
92
|
+
body: z.string().describe('Memo body'),
|
|
93
|
+
is_public: z.boolean().describe('Whether to publish the memo'),
|
|
94
|
+
categories: z.array(memoCategorySchema).describe('Categories').optional(),
|
|
89
95
|
}),
|
|
90
96
|
paput_get_categories: emptySchema,
|
|
91
97
|
paput_create_note: z.object({
|
|
92
|
-
title: z.string().describe('
|
|
93
|
-
is_public: z
|
|
98
|
+
title: z.string().describe('Note title'),
|
|
99
|
+
is_public: z
|
|
100
|
+
.boolean()
|
|
101
|
+
.default(false)
|
|
102
|
+
.describe('Whether to publish the note'),
|
|
94
103
|
memo_ids: z
|
|
95
104
|
.array(z.number())
|
|
96
|
-
.describe('
|
|
105
|
+
.describe('Memo IDs to include in the note')
|
|
97
106
|
.optional(),
|
|
98
107
|
}),
|
|
99
108
|
paput_search_notes: z.object({
|
|
100
|
-
word: z.string().describe('
|
|
109
|
+
word: z.string().describe('Search keyword').optional(),
|
|
101
110
|
is_public: z
|
|
102
111
|
.boolean()
|
|
103
|
-
.describe('
|
|
112
|
+
.describe('Whether to return only public notes')
|
|
104
113
|
.optional(),
|
|
105
|
-
page: z.number().min(1).describe('
|
|
114
|
+
page: z.number().min(1).describe('Page number, starting at 1').optional(),
|
|
106
115
|
limit: z
|
|
107
116
|
.number()
|
|
108
117
|
.min(1)
|
|
109
118
|
.max(100)
|
|
110
|
-
.describe('
|
|
119
|
+
.describe('Number of items per page')
|
|
111
120
|
.optional(),
|
|
112
121
|
}),
|
|
113
122
|
paput_get_note: z.object({
|
|
114
|
-
id: z.number().describe('
|
|
123
|
+
id: z.number().describe('Note ID'),
|
|
115
124
|
}),
|
|
116
125
|
paput_update_note: z.object({
|
|
117
|
-
id: z.number().describe('
|
|
118
|
-
title: z.string().describe('
|
|
119
|
-
is_public: z.boolean().describe('
|
|
126
|
+
id: z.number().describe('Note ID'),
|
|
127
|
+
title: z.string().describe('New note title').optional(),
|
|
128
|
+
is_public: z.boolean().describe('Whether to publish the note').optional(),
|
|
120
129
|
memo_ids: z
|
|
121
130
|
.array(z.number())
|
|
122
|
-
.describe('
|
|
131
|
+
.describe('Memo IDs to include in the note')
|
|
123
132
|
.optional(),
|
|
124
133
|
}),
|
|
125
134
|
paput_get_skill_sheet: emptySchema,
|
|
126
135
|
paput_update_skill_sheet_basic_info: z.object({
|
|
127
|
-
nearest_station: z.string().describe('
|
|
128
|
-
gender: z.number().describe('
|
|
129
|
-
birth_date: z
|
|
130
|
-
|
|
136
|
+
nearest_station: z.string().describe('Nearest station').optional(),
|
|
137
|
+
gender: z.number().describe('Gender: 1 male, 2 female').optional(),
|
|
138
|
+
birth_date: z
|
|
139
|
+
.string()
|
|
140
|
+
.describe('Birth date in YYYY-MM-DD format')
|
|
141
|
+
.optional(),
|
|
142
|
+
years_of_experience: z.number().describe('Years of experience').optional(),
|
|
131
143
|
}),
|
|
132
144
|
paput_update_skill_sheet_self_pr: z.object({
|
|
133
|
-
self_pr: z.string().describe('
|
|
145
|
+
self_pr: z.string().describe('Self PR text').optional(),
|
|
134
146
|
}),
|
|
135
147
|
paput_set_skill_sheet_skills: z.object({
|
|
136
|
-
skills: z.array(skillSchema).describe('
|
|
148
|
+
skills: z.array(skillSchema).describe('Skill list'),
|
|
137
149
|
}),
|
|
138
150
|
paput_upsert_skill_sheet_project: skillSheetProjectSchema,
|
|
139
151
|
paput_delete_skill_sheet_project: z.object({
|
|
140
|
-
project_id: z.number().describe('
|
|
152
|
+
project_id: z.number().describe('Project ID to delete'),
|
|
141
153
|
}),
|
|
142
154
|
paput_cache_status: emptySchema,
|
|
143
155
|
paput_sync_remote_memos: z.object({
|
|
144
156
|
limit: z
|
|
145
157
|
.number()
|
|
146
|
-
.describe('
|
|
158
|
+
.describe('Number of items per page. Maximum 100.')
|
|
147
159
|
.optional(),
|
|
148
160
|
max_pages: z
|
|
149
161
|
.number()
|
|
150
|
-
.describe('
|
|
162
|
+
.describe('Maximum number of pages to fetch. Defaults to 20.')
|
|
151
163
|
.optional(),
|
|
152
164
|
}),
|
|
153
165
|
paput_scan_sessions: z.object({
|
|
154
166
|
sources: z
|
|
155
167
|
.array(z.enum(['claude', 'codex']))
|
|
156
|
-
.describe('
|
|
168
|
+
.describe('Session sources to scan')
|
|
157
169
|
.optional(),
|
|
158
170
|
include_processed: z
|
|
159
171
|
.boolean()
|
|
160
172
|
.default(false)
|
|
161
|
-
.describe('
|
|
173
|
+
.describe('Whether to include already processed sessions')
|
|
162
174
|
.optional(),
|
|
163
175
|
}),
|
|
164
176
|
paput_get_session_transcript: z.object({
|
|
165
|
-
session_id: z.string().describe('
|
|
166
|
-
source: z.enum(['claude', 'codex']).describe('
|
|
177
|
+
session_id: z.string().describe('Session ID to read'),
|
|
178
|
+
source: z.enum(['claude', 'codex']).describe('Session source'),
|
|
167
179
|
max_chars: z
|
|
168
180
|
.number()
|
|
169
|
-
.describe('
|
|
181
|
+
.describe('Maximum number of characters to return. Defaults to 20000.')
|
|
170
182
|
.optional(),
|
|
171
183
|
}),
|
|
172
184
|
paput_add_knowledge_candidates: z.object({
|
|
173
|
-
session_id: z.string().describe('
|
|
174
|
-
source: z.enum(['claude', 'codex']).describe('
|
|
175
|
-
candidates: z
|
|
185
|
+
session_id: z.string().describe('Source session ID'),
|
|
186
|
+
source: z.enum(['claude', 'codex']).describe('Source session provider'),
|
|
187
|
+
candidates: z
|
|
188
|
+
.array(knowledgeCandidateSchema)
|
|
189
|
+
.describe('Knowledge candidates to add'),
|
|
176
190
|
}),
|
|
177
191
|
paput_list_pending_candidates: z.object({
|
|
178
|
-
limit: z
|
|
192
|
+
limit: z
|
|
193
|
+
.number()
|
|
194
|
+
.describe('Number of items to return. Defaults to 20.')
|
|
195
|
+
.optional(),
|
|
179
196
|
}),
|
|
180
197
|
paput_save_pending_candidate: z.object({
|
|
181
|
-
candidate_id: z.string().describe('
|
|
182
|
-
title: z.string().describe('
|
|
183
|
-
body: z.string().describe('
|
|
198
|
+
candidate_id: z.string().describe('Candidate ID to save'),
|
|
199
|
+
title: z.string().describe('Title override when saving').optional(),
|
|
200
|
+
body: z.string().describe('Body override when saving').optional(),
|
|
184
201
|
created_at: z
|
|
185
202
|
.string()
|
|
186
|
-
.describe('PaPut
|
|
203
|
+
.describe('Creation timestamp to use for the PaPut memo. Defaults to the source session updated timestamp.')
|
|
187
204
|
.optional(),
|
|
188
205
|
categories: z.array(z.string()).optional(),
|
|
189
206
|
projects: z
|
|
190
207
|
.array(projectReferenceSchema)
|
|
191
|
-
.describe('
|
|
208
|
+
.describe('Projects to link when saving')
|
|
192
209
|
.optional(),
|
|
193
210
|
is_public: z.boolean().default(false).optional(),
|
|
194
211
|
}),
|
|
195
212
|
paput_discard_pending_candidate: z.object({
|
|
196
|
-
candidate_id: z.string().describe('
|
|
197
|
-
reason: z.string().describe('
|
|
213
|
+
candidate_id: z.string().describe('Candidate ID to discard'),
|
|
214
|
+
reason: z.string().describe('Reason for discarding').optional(),
|
|
198
215
|
}),
|
|
199
216
|
};
|
|
200
217
|
export function getGeneratedInputSchema(toolName) {
|