@nahisaho/katashiro-mcp-server 0.1.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/cli.d.ts.map +1 -0
- package/dist/cli.js +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/prompts/prompt-registry.d.ts.map +1 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/protocol-handler.d.ts.map +1 -0
- package/dist/resources/resource-manager.d.ts.map +1 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/stdio-transport.d.ts.map +1 -0
- package/package.json +40 -0
- package/src/cli.ts +64 -0
- package/src/index.ts +77 -0
- package/src/prompts/prompt-registry.ts +195 -0
- package/src/protocol/index.ts +5 -0
- package/src/protocol/protocol-handler.ts +438 -0
- package/src/resources/resource-manager.ts +265 -0
- package/src/server/mcp-server.ts +474 -0
- package/src/tools/tool-registry.ts +158 -0
- package/src/transport/index.ts +5 -0
- package/src/transport/stdio-transport.ts +272 -0
- package/tests/unit/mcp-server.test.ts +164 -0
- package/tests/unit/prompt-registry.test.ts +193 -0
- package/tests/unit/protocol-handler.test.ts +331 -0
- package/tests/unit/resource-manager.test.ts +162 -0
- package/tests/unit/stdio-transport.test.ts +180 -0
- package/tests/unit/tool-registry.test.ts +140 -0
- package/tsconfig.json +14 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* KATASHIRO MCP Server CLI
|
|
4
|
+
*
|
|
5
|
+
* Entry point for running the MCP server via STDIO transport
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @nahisaho/katashiro-mcp-server
|
|
9
|
+
* katashiro-mcp-server
|
|
10
|
+
*
|
|
11
|
+
* @module @nahisaho/katashiro-mcp-server
|
|
12
|
+
* @task TSK-062
|
|
13
|
+
*/
|
|
14
|
+
import { KatashiroMCPServer } from './server/mcp-server.js';
|
|
15
|
+
import { StdioTransport } from './transport/stdio-transport.js';
|
|
16
|
+
import { MCPProtocolHandler } from './protocol/protocol-handler.js';
|
|
17
|
+
/**
|
|
18
|
+
* Main entry point
|
|
19
|
+
*/
|
|
20
|
+
async function main() {
|
|
21
|
+
// Create server instance
|
|
22
|
+
const server = new KatashiroMCPServer();
|
|
23
|
+
// Create protocol handler
|
|
24
|
+
const protocolHandler = new MCPProtocolHandler(server);
|
|
25
|
+
// Create STDIO transport
|
|
26
|
+
const transport = new StdioTransport();
|
|
27
|
+
// Set up message handling
|
|
28
|
+
transport.onMessage(async (message) => {
|
|
29
|
+
return protocolHandler.handleMessage(message);
|
|
30
|
+
});
|
|
31
|
+
// Set up error handling
|
|
32
|
+
transport.onError((error) => {
|
|
33
|
+
console.error('[KATASHIRO MCP] Transport error:', error.message);
|
|
34
|
+
});
|
|
35
|
+
// Handle process signals
|
|
36
|
+
process.on('SIGINT', () => {
|
|
37
|
+
transport.stop();
|
|
38
|
+
process.exit(0);
|
|
39
|
+
});
|
|
40
|
+
process.on('SIGTERM', () => {
|
|
41
|
+
transport.stop();
|
|
42
|
+
process.exit(0);
|
|
43
|
+
});
|
|
44
|
+
// Start the transport
|
|
45
|
+
transport.start();
|
|
46
|
+
// Log startup (to stderr, not stdout which is used for JSON-RPC)
|
|
47
|
+
console.error(`[KATASHIRO MCP] Server started: ${server.getName()} v${server.getServerInfo().version}`);
|
|
48
|
+
}
|
|
49
|
+
// Run main
|
|
50
|
+
main().catch((error) => {
|
|
51
|
+
console.error('[KATASHIRO MCP] Fatal error:', error);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EACV,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,WAAW,EACX,cAAc,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,YAAY,EACV,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-registry.d.ts","sourceRoot":"","sources":["../../src/prompts/prompt-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA4C;IAE3D;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAYvD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,gBAAgB,GAAG,IAAI,EAAE,KAAK,CAAC;IAQzD;;;;OAIG;IACH,IAAI,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC;IAQzC;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAkBzE;;;;;;OAMG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAqClC;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAQhD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/protocol/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol-handler.d.ts","sourceRoot":"","sources":["../../src/protocol/protocol-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EAEX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAIzB,MAAM,iCAAiC,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,KAAK,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,UAAU,CAAkD;gBAEvC,MAAM,EAAE,kBAAkB;IAEvD;;OAEG;IACH,QAAQ,IAAI,aAAa;IAIzB;;OAEG;IACH,aAAa,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIzD;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,cAAc,GAAG,mBAAmB,GAC5C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAuDlC;;OAEG;YACW,kBAAkB;IAoBhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;YACW,eAAe;IA8B7B;;OAEG;YACW,mBAAmB;IA0BjC;;OAEG;YACW,mBAAmB;IAmCjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,gBAAgB;IA8B9B;;OAEG;IACH,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/resources/resource-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,aAAa,CAA6D;IAClF,OAAO,CAAC,mBAAmB,CAAK;IAEhC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAY3D;;;;;OAKG;IACH,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,KAAK,CAAC;IAcpE;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAuBhE;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAmB7E;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAc3D;;;;;;OAMG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAyBxE;;;;OAIG;IACH,aAAa,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC;IAwBlD;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAS/C;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/tools/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA0C;IAEvD;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IAYnD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,KAAK,CAAC;IAQvD;;;;OAIG;IACH,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC;IAQvC;;;;;;OAMG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;IAc9C;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAQhD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../src/transport/stdio-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;CAMnB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,cAAc,GAAG,mBAAmB,KAC1C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;AAErE;;;;;GAKG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPzB,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAyC;gBAG1C,KAAK,GAAE,QAAwB,EAC/B,MAAM,GAAE,QAAyB;IAGpD;;OAEG;IACH,QAAQ,IAAI,cAAc;IAI1B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI9C;;OAEG;IACH,KAAK,IAAI,IAAI;IA2Bb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB,GAAG,IAAI;IAS1D;;OAEG;YACW,UAAU;IA0BxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,SAAS;CAkBlB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,MAAM,EAAE,OAAO,GACd,eAAe,CAMjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,eAAe,CAUjB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nahisaho/katashiro-mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "KATASHIRO MCP Server - Model Context Protocol server for AI-powered research",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"katashiro-mcp": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"test": "vitest run"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
18
|
+
"zod": "^3.23.0",
|
|
19
|
+
"@nahisaho/katashiro-core": "*",
|
|
20
|
+
"@nahisaho/katashiro-collector": "*",
|
|
21
|
+
"@nahisaho/katashiro-analyzer": "*",
|
|
22
|
+
"@nahisaho/katashiro-generator": "*",
|
|
23
|
+
"@nahisaho/katashiro-knowledge": "*",
|
|
24
|
+
"@nahisaho/katashiro-feedback": "*"
|
|
25
|
+
},
|
|
26
|
+
"author": "nahisaho",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/nahisaho/katashiro.git",
|
|
31
|
+
"directory": "packages/mcp-server"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/nahisaho/katashiro#readme",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/nahisaho/katashiro/issues"
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* KATASHIRO MCP Server CLI
|
|
4
|
+
*
|
|
5
|
+
* Entry point for running the MCP server via STDIO transport
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @nahisaho/katashiro-mcp-server
|
|
9
|
+
* katashiro-mcp-server
|
|
10
|
+
*
|
|
11
|
+
* @module @nahisaho/katashiro-mcp-server
|
|
12
|
+
* @task TSK-062
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { KatashiroMCPServer } from './server/mcp-server.js';
|
|
16
|
+
import { StdioTransport } from './transport/stdio-transport.js';
|
|
17
|
+
import { MCPProtocolHandler } from './protocol/protocol-handler.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Main entry point
|
|
21
|
+
*/
|
|
22
|
+
async function main(): Promise<void> {
|
|
23
|
+
// Create server instance
|
|
24
|
+
const server = new KatashiroMCPServer();
|
|
25
|
+
|
|
26
|
+
// Create protocol handler
|
|
27
|
+
const protocolHandler = new MCPProtocolHandler(server);
|
|
28
|
+
|
|
29
|
+
// Create STDIO transport
|
|
30
|
+
const transport = new StdioTransport();
|
|
31
|
+
|
|
32
|
+
// Set up message handling
|
|
33
|
+
transport.onMessage(async (message) => {
|
|
34
|
+
return protocolHandler.handleMessage(message);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Set up error handling
|
|
38
|
+
transport.onError((error) => {
|
|
39
|
+
console.error('[KATASHIRO MCP] Transport error:', error.message);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Handle process signals
|
|
43
|
+
process.on('SIGINT', () => {
|
|
44
|
+
transport.stop();
|
|
45
|
+
process.exit(0);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
process.on('SIGTERM', () => {
|
|
49
|
+
transport.stop();
|
|
50
|
+
process.exit(0);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Start the transport
|
|
54
|
+
transport.start();
|
|
55
|
+
|
|
56
|
+
// Log startup (to stderr, not stdout which is used for JSON-RPC)
|
|
57
|
+
console.error(`[KATASHIRO MCP] Server started: ${server.getName()} v${server.getServerInfo().version}`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Run main
|
|
61
|
+
main().catch((error) => {
|
|
62
|
+
console.error('[KATASHIRO MCP] Fatal error:', error);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
});
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/katashiro-mcp-server
|
|
3
|
+
* MCP (Model Context Protocol) サーバー実装
|
|
4
|
+
*
|
|
5
|
+
* Official MCP Specification: https://modelcontextprotocol.io
|
|
6
|
+
*
|
|
7
|
+
* @design DES-KATASHIRO-001 §2.4 MCP Server
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// Server
|
|
11
|
+
export { KatashiroMCPServer } from './server/mcp-server.js';
|
|
12
|
+
export type {
|
|
13
|
+
MCPTool,
|
|
14
|
+
MCPPrompt,
|
|
15
|
+
MCPResource,
|
|
16
|
+
ToolResult,
|
|
17
|
+
PromptResult,
|
|
18
|
+
ServerCapabilities,
|
|
19
|
+
ServerInfo,
|
|
20
|
+
} from './server/mcp-server.js';
|
|
21
|
+
|
|
22
|
+
// Transport
|
|
23
|
+
export {
|
|
24
|
+
StdioTransport,
|
|
25
|
+
createSuccessResponse,
|
|
26
|
+
createErrorResponse,
|
|
27
|
+
JsonRpcErrorCode,
|
|
28
|
+
} from './transport/index.js';
|
|
29
|
+
export type {
|
|
30
|
+
JsonRpcRequest,
|
|
31
|
+
JsonRpcNotification,
|
|
32
|
+
JsonRpcResponse,
|
|
33
|
+
JsonRpcError,
|
|
34
|
+
MessageHandler,
|
|
35
|
+
TransportState,
|
|
36
|
+
} from './transport/index.js';
|
|
37
|
+
|
|
38
|
+
// Protocol
|
|
39
|
+
export { MCPProtocolHandler, MCP_PROTOCOL_VERSION } from './protocol/index.js';
|
|
40
|
+
export type {
|
|
41
|
+
InitializeParams,
|
|
42
|
+
InitializeResult,
|
|
43
|
+
ToolsListResult,
|
|
44
|
+
ToolsCallParams,
|
|
45
|
+
ResourcesListResult,
|
|
46
|
+
ResourcesReadParams,
|
|
47
|
+
PromptsListResult,
|
|
48
|
+
PromptsGetParams,
|
|
49
|
+
ProtocolState,
|
|
50
|
+
} from './protocol/index.js';
|
|
51
|
+
|
|
52
|
+
// Tools (legacy, for backward compatibility)
|
|
53
|
+
export { ToolRegistry } from './tools/tool-registry.js';
|
|
54
|
+
export type {
|
|
55
|
+
ToolContent,
|
|
56
|
+
ToolExecutionResult,
|
|
57
|
+
ToolHandler,
|
|
58
|
+
RegisteredTool,
|
|
59
|
+
} from './tools/tool-registry.js';
|
|
60
|
+
|
|
61
|
+
// Prompts (legacy, for backward compatibility)
|
|
62
|
+
export { PromptRegistry } from './prompts/prompt-registry.js';
|
|
63
|
+
export type {
|
|
64
|
+
PromptArgument,
|
|
65
|
+
RegisteredPrompt,
|
|
66
|
+
ValidationResult,
|
|
67
|
+
} from './prompts/prompt-registry.js';
|
|
68
|
+
|
|
69
|
+
// Resources (legacy, for backward compatibility)
|
|
70
|
+
export { ResourceManager } from './resources/resource-manager.js';
|
|
71
|
+
export type {
|
|
72
|
+
ResourceContent,
|
|
73
|
+
ContentProvider,
|
|
74
|
+
ResourceDefinition,
|
|
75
|
+
ResourceTemplate,
|
|
76
|
+
SubscriptionCallback,
|
|
77
|
+
} from './resources/resource-manager.js';
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptRegistry - プロンプト登録・管理
|
|
3
|
+
*
|
|
4
|
+
* MCPプロンプトの登録と実行を管理
|
|
5
|
+
*
|
|
6
|
+
* @module @nahisaho/katashiro-mcp-server
|
|
7
|
+
* @task TSK-062
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { ok, err, type Result } from '@nahisaho/katashiro-core';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Prompt argument definition
|
|
14
|
+
*/
|
|
15
|
+
export interface PromptArgument {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
required?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Registered prompt
|
|
23
|
+
*/
|
|
24
|
+
export interface RegisteredPrompt {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
template: string;
|
|
28
|
+
arguments?: PromptArgument[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Validation result
|
|
33
|
+
*/
|
|
34
|
+
export interface ValidationResult {
|
|
35
|
+
valid: boolean;
|
|
36
|
+
missing: string[];
|
|
37
|
+
extra: string[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* PromptRegistry
|
|
42
|
+
*
|
|
43
|
+
* Manages MCP prompt registration and rendering
|
|
44
|
+
*/
|
|
45
|
+
export class PromptRegistry {
|
|
46
|
+
private prompts: Map<string, RegisteredPrompt> = new Map();
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Register a prompt
|
|
50
|
+
*
|
|
51
|
+
* @param prompt - Prompt to register
|
|
52
|
+
* @returns Result
|
|
53
|
+
*/
|
|
54
|
+
register(prompt: RegisteredPrompt): Result<void, Error> {
|
|
55
|
+
try {
|
|
56
|
+
if (this.prompts.has(prompt.name)) {
|
|
57
|
+
return err(new Error(`Prompt already registered: ${prompt.name}`));
|
|
58
|
+
}
|
|
59
|
+
this.prompts.set(prompt.name, prompt);
|
|
60
|
+
return ok(undefined);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Get a registered prompt
|
|
68
|
+
*
|
|
69
|
+
* @param name - Prompt name
|
|
70
|
+
* @returns Prompt or null
|
|
71
|
+
*/
|
|
72
|
+
get(name: string): Result<RegisteredPrompt | null, Error> {
|
|
73
|
+
try {
|
|
74
|
+
return ok(this.prompts.get(name) ?? null);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* List all registered prompts
|
|
82
|
+
*
|
|
83
|
+
* @returns Array of prompts
|
|
84
|
+
*/
|
|
85
|
+
list(): Result<RegisteredPrompt[], Error> {
|
|
86
|
+
try {
|
|
87
|
+
return ok(Array.from(this.prompts.values()));
|
|
88
|
+
} catch (error) {
|
|
89
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Render a prompt with arguments
|
|
95
|
+
*
|
|
96
|
+
* @param name - Prompt name
|
|
97
|
+
* @param args - Arguments to fill in
|
|
98
|
+
* @returns Rendered template
|
|
99
|
+
*/
|
|
100
|
+
render(name: string, args: Record<string, string>): Result<string, Error> {
|
|
101
|
+
try {
|
|
102
|
+
const prompt = this.prompts.get(name);
|
|
103
|
+
if (!prompt) {
|
|
104
|
+
return err(new Error(`Unknown prompt: ${name}`));
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let rendered = prompt.template;
|
|
108
|
+
for (const [key, value] of Object.entries(args)) {
|
|
109
|
+
rendered = rendered.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return ok(rendered);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Validate arguments for a prompt
|
|
120
|
+
*
|
|
121
|
+
* @param name - Prompt name
|
|
122
|
+
* @param args - Arguments to validate
|
|
123
|
+
* @returns Validation result
|
|
124
|
+
*/
|
|
125
|
+
validate(
|
|
126
|
+
name: string,
|
|
127
|
+
args: Record<string, unknown>
|
|
128
|
+
): Result<ValidationResult, Error> {
|
|
129
|
+
try {
|
|
130
|
+
const prompt = this.prompts.get(name);
|
|
131
|
+
if (!prompt) {
|
|
132
|
+
return err(new Error(`Unknown prompt: ${name}`));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
const missing: string[] = [];
|
|
136
|
+
const extra: string[] = [];
|
|
137
|
+
|
|
138
|
+
// Check for missing required arguments
|
|
139
|
+
if (prompt.arguments) {
|
|
140
|
+
for (const arg of prompt.arguments) {
|
|
141
|
+
if (arg.required && !(arg.name in args)) {
|
|
142
|
+
missing.push(arg.name);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Check for extra arguments
|
|
147
|
+
const validNames = new Set(prompt.arguments.map((a) => a.name));
|
|
148
|
+
for (const key of Object.keys(args)) {
|
|
149
|
+
if (!validNames.has(key)) {
|
|
150
|
+
extra.push(key);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return ok({
|
|
156
|
+
valid: missing.length === 0,
|
|
157
|
+
missing,
|
|
158
|
+
extra,
|
|
159
|
+
});
|
|
160
|
+
} catch (error) {
|
|
161
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Unregister a prompt
|
|
167
|
+
*
|
|
168
|
+
* @param name - Prompt name
|
|
169
|
+
* @returns Whether unregistered
|
|
170
|
+
*/
|
|
171
|
+
unregister(name: string): Result<boolean, Error> {
|
|
172
|
+
try {
|
|
173
|
+
return ok(this.prompts.delete(name));
|
|
174
|
+
} catch (error) {
|
|
175
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Check if prompt exists
|
|
181
|
+
*
|
|
182
|
+
* @param name - Prompt name
|
|
183
|
+
* @returns Whether exists
|
|
184
|
+
*/
|
|
185
|
+
has(name: string): boolean {
|
|
186
|
+
return this.prompts.has(name);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Clear all prompts
|
|
191
|
+
*/
|
|
192
|
+
clear(): void {
|
|
193
|
+
this.prompts.clear();
|
|
194
|
+
}
|
|
195
|
+
}
|