@aalis/plugin-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/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # plugin-mcp-server
2
+
3
+ 把 Aalis 注册的 tools 通过 [MCP (Model Context Protocol)](https://modelcontextprotocol.io) 协议**反向暴露**给外部 client(Claude Desktop / Cursor / 其他 MCP-aware app)。
4
+
5
+ ## 传输方式
6
+
7
+ HTTP + SSE。Aalis 是常驻进程,stdio 已被日志占用,因此不走 Anthropic 默认的 stdio transport。
8
+
9
+ - SSE endpoint: `http://<bind>:<port>/sse`
10
+ - POST messages: `http://<bind>:<port>/messages`
11
+
12
+ > SSE 同时只支持一个活跃连接(协议标准),新连接会挤掉旧连接。
13
+
14
+ ## 安全约束
15
+
16
+ - 默认 `bind: 127.0.0.1`(仅本机访问)—— **不要随便暴露到公网**
17
+ - 默认 `allowDangerous: false`,`safetyLevel='dangerous'` 工具一律拒绝
18
+ - `ListTools` 与 `CallTool` 两端都过滤,防止 client 越界
19
+ - `toolGroups` 白名单:仅暴露指定分组(空数组 = 全部允许,但仍受 dangerous 开关约束)
20
+ - 工具执行仍走 Aalis 的 `ToolService.execute`,因此 authority guard / permissions resolver 全部生效
21
+
22
+ ## 配置示例
23
+
24
+ ```yaml
25
+ plugins:
26
+ "@aalis/plugin-mcp-server":
27
+ enabled: true
28
+ port: 39870
29
+ bind: 127.0.0.1
30
+ toolGroups:
31
+ - websearch
32
+ - memory
33
+ allowDangerous: false
34
+ ```
35
+
36
+ Claude Desktop 客户端配置(仅供参考;MCP client 配置因 host app 而异):
37
+
38
+ ```json
39
+ {
40
+ "mcpServers": {
41
+ "aalis": {
42
+ "type": "sse",
43
+ "url": "http://127.0.0.1:39870/sse"
44
+ }
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## 依赖
50
+
51
+ - `@modelcontextprotocol/sdk` ^1.0.4
52
+ - inject.required: `tools`
53
+
54
+ ## 工具调用上下文
55
+
56
+ 由于 MCP 协议不传递 session/user 概念,每次调用注入合成 `ToolCallContext`:
57
+
58
+ ```ts
59
+ { sessionId: 'mcp-server', userId: 'mcp-client', platform: 'mcp' }
60
+ ```
61
+
62
+ 如果你的工具依赖 sessionId 做权限隔离,需自行处理 platform === 'mcp' 分支。
@@ -0,0 +1,32 @@
1
+ import type { ConfigSchema, Context } from '@aalis/core';
2
+ import '@aalis/plugin-tools-api';
3
+ import type { RegisteredTool, ToolService } from '@aalis/plugin-tools-api';
4
+ import { Server as McpServer } from '@modelcontextprotocol/sdk/server/index.js';
5
+ interface Config {
6
+ /** 监听端口(必须 1-65535)。要暂停服务请在插件列表里禁用本插件。 */
7
+ port: number;
8
+ /** 监听地址,默认 127.0.0.1 */
9
+ bind: string;
10
+ /** 仅暴露这些工具分组(空 = 全部允许,但仍受 allowDangerous 约束) */
11
+ toolGroups: string[];
12
+ /** 是否允许暴露 safetyLevel='dangerous' 的工具 */
13
+ allowDangerous: boolean;
14
+ }
15
+ export declare const name = "@aalis/plugin-mcp-server";
16
+ export declare const displayName = "MCP \u670D\u52A1\u7AEF";
17
+ export declare const subsystem = "tools";
18
+ export declare const inject: {
19
+ required: string[];
20
+ };
21
+ export declare const defaultConfig: Config;
22
+ export declare const configSchema: ConfigSchema;
23
+ export declare function apply(ctx: Context, rawConfig: Record<string, unknown>): Promise<void>;
24
+ /**
25
+ * 构造一个 MCP server 实例并装好 ListTools / CallTool 路由。
26
+ * 不绑定 transport;调用方负责 `server.connect(transport)`。
27
+ * 导出以便集成测试通过 InMemoryTransport 直连,避开 HTTP/SSE 层。
28
+ */
29
+ export declare function buildMcpServer(_ctx: Context, tools: ToolService, config: Config): McpServer;
30
+ export type _ReferencedTypes = RegisteredTool;
31
+ export {};
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAmB,WAAW,EAAe,MAAM,yBAAyB,CAAC;AACzG,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAIhF,UAAU,MAAM;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yCAAyC;IACzC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,IAAI,6BAA6B,CAAC;AAC/C,eAAO,MAAM,WAAW,2BAAY,CAAC;AACrC,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC,eAAO,MAAM,MAAM;;CAA0B,CAAC;AAE9C,eAAO,MAAM,aAAa,EAAE,MAK3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YA2B1B,CAAC;AAEF,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F3F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAuE3F;AAGD,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,208 @@
1
+ /**
2
+ * @aalis/plugin-mcp-server
3
+ *
4
+ * 反向 MCP 桥:把 Aalis 注册的 tools 通过 MCP 协议暴露给外部 client
5
+ * (Claude Desktop / Cursor / 其他 MCP-aware app)。
6
+ *
7
+ * 传输方式:HTTP + SSE(Aalis 是常驻进程,stdio 已被日志占用)。
8
+ * 外部 client 通过 SSE URL 连接。
9
+ *
10
+ * 安全考虑:
11
+ * - 默认拒绝 safetyLevel='dangerous' 的工具暴露;config.allowDangerous 可改
12
+ * - config.toolGroups 白名单:仅暴露指定分组(空数组=全部允许)
13
+ * - config.bind 默认 127.0.0.1(仅本机访问)
14
+ */
15
+ import { createServer } from 'node:http';
16
+ import '@aalis/plugin-tools-api';
17
+ import { Server as McpServer } from '@modelcontextprotocol/sdk/server/index.js';
18
+ import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
19
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
20
+ export const name = '@aalis/plugin-mcp-server';
21
+ export const displayName = 'MCP 服务端';
22
+ export const subsystem = 'tools';
23
+ export const inject = { required: ['tools'] };
24
+ export const defaultConfig = {
25
+ port: 7861,
26
+ bind: '127.0.0.1',
27
+ toolGroups: [],
28
+ allowDangerous: false,
29
+ };
30
+ export const configSchema = {
31
+ port: {
32
+ type: 'number',
33
+ label: '监听端口',
34
+ description: '必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。',
35
+ default: 7861,
36
+ },
37
+ bind: { type: 'string', label: '监听地址', default: '127.0.0.1' },
38
+ toolGroups: {
39
+ type: 'array',
40
+ label: '允许的工具分组(空=全部,受危险开关约束)',
41
+ description: '空列表 = 暴露所有分组的工具(仍受 allowDangerous 约束)。',
42
+ items: {
43
+ name: {
44
+ type: 'string',
45
+ label: '分组名',
46
+ description: '如 mcp:godot / file / system。',
47
+ required: true,
48
+ },
49
+ },
50
+ default: [],
51
+ },
52
+ allowDangerous: {
53
+ type: 'boolean',
54
+ label: '允许暴露 dangerous 工具',
55
+ default: false,
56
+ },
57
+ };
58
+ export async function apply(ctx, rawConfig) {
59
+ const config = rawConfig;
60
+ if (!Number.isInteger(config.port) || config.port <= 0 || config.port > 65535) {
61
+ ctx.logger.error(`plugin-mcp-server 端口非法:port=${config.port}。请设置 1-65535 之间的整数;要停服务请在插件列表里禁用本插件。`);
62
+ return;
63
+ }
64
+ // 兼容两种 toolGroups 形态:string[](yaml 手写)/ Array<{name:string}>(WebUI 数组项)
65
+ config.toolGroups = config.toolGroups
66
+ .map(g => (typeof g === 'string' ? g : typeof g?.name === 'string' ? g.name : ''))
67
+ .filter(Boolean);
68
+ const tools = ctx.getService('tools');
69
+ if (!tools) {
70
+ ctx.logger.error('tools 服务不可用');
71
+ return;
72
+ }
73
+ // SSE 同时只支持一个活跃连接(标准约束);新连接挤掉旧的
74
+ let currentTransport;
75
+ let mcpServer;
76
+ const httpServer = createServer(async (req, res) => {
77
+ const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`);
78
+ if (req.method === 'GET' && url.pathname === '/sse') {
79
+ // 新 SSE 连接
80
+ if (currentTransport) {
81
+ try {
82
+ await currentTransport.close();
83
+ }
84
+ catch {
85
+ /* ignore */
86
+ }
87
+ }
88
+ const transport = new SSEServerTransport('/messages', res);
89
+ currentTransport = transport;
90
+ mcpServer = buildMcpServer(ctx, tools, config);
91
+ await mcpServer.connect(transport);
92
+ ctx.logger.info('MCP client 已通过 SSE 连接');
93
+ req.on('close', () => {
94
+ if (currentTransport === transport) {
95
+ currentTransport = undefined;
96
+ mcpServer = undefined;
97
+ ctx.logger.info('MCP client 已断开');
98
+ }
99
+ });
100
+ return;
101
+ }
102
+ if (req.method === 'POST' && url.pathname === '/messages') {
103
+ if (!currentTransport) {
104
+ res.writeHead(409, { 'content-type': 'application/json' });
105
+ res.end(JSON.stringify({ error: 'no active SSE session' }));
106
+ return;
107
+ }
108
+ await currentTransport.handlePostMessage(req, res);
109
+ return;
110
+ }
111
+ res.writeHead(404, { 'content-type': 'application/json' });
112
+ res.end(JSON.stringify({ error: 'not found' }));
113
+ });
114
+ await new Promise((resolve, reject) => {
115
+ httpServer.once('error', reject);
116
+ httpServer.listen(config.port, config.bind, () => {
117
+ httpServer.off('error', reject);
118
+ resolve();
119
+ });
120
+ });
121
+ ctx.logger.info(`MCP server 监听 http://${config.bind}:${config.port}/sse (allowDangerous=${config.allowDangerous}, groups=${config.toolGroups.length === 0 ? '*' : config.toolGroups.join(',')})`);
122
+ ctx.onDispose(async () => {
123
+ if (currentTransport) {
124
+ try {
125
+ await currentTransport.close();
126
+ }
127
+ catch {
128
+ /* ignore */
129
+ }
130
+ }
131
+ await new Promise(resolve => httpServer.close(() => resolve()));
132
+ ctx.logger.info('MCP server 已停止');
133
+ });
134
+ }
135
+ /**
136
+ * 构造一个 MCP server 实例并装好 ListTools / CallTool 路由。
137
+ * 不绑定 transport;调用方负责 `server.connect(transport)`。
138
+ * 导出以便集成测试通过 InMemoryTransport 直连,避开 HTTP/SSE 层。
139
+ */
140
+ export function buildMcpServer(_ctx, tools, config) {
141
+ const server = new McpServer({ name: 'aalis-mcp-server', version: '0.1.0' }, { capabilities: { tools: {} } });
142
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
143
+ const all = tools.getAll();
144
+ const groupFilter = new Set(config.toolGroups);
145
+ const filtered = all.filter(t => {
146
+ if (!config.allowDangerous && t.safety === 'dangerous')
147
+ return false;
148
+ if (groupFilter.size > 0) {
149
+ const groups = t.groups ?? [];
150
+ if (!groups.some(g => groupFilter.has(g)))
151
+ return false;
152
+ }
153
+ return true;
154
+ });
155
+ // 需要拿 definition 才能给出 parameters;这里再走一次 getDefinitions 取
156
+ const defsByName = new Map();
157
+ for (const s of tools.getSummaries())
158
+ defsByName.set(s.name, s);
159
+ const definitions = tools.getDefinitions();
160
+ const defMap = new Map(definitions.map(d => [d.function.name, d]));
161
+ return {
162
+ tools: filtered.map(t => {
163
+ const def = defMap.get(t.name);
164
+ return {
165
+ name: t.name,
166
+ description: t.description,
167
+ inputSchema: def?.function.parameters ?? {
168
+ type: 'object',
169
+ properties: {},
170
+ },
171
+ };
172
+ }),
173
+ };
174
+ });
175
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
176
+ const toolName = request.params.name;
177
+ const args = (request.params.arguments ?? {});
178
+ // 二次安全检查:即便 listTools 已过滤,CallTool 仍重新校验,防止 client 越界
179
+ const meta = tools.getAll().find(t => t.name === toolName);
180
+ if (!meta) {
181
+ return {
182
+ content: [{ type: 'text', text: `工具不存在: ${toolName}` }],
183
+ isError: true,
184
+ };
185
+ }
186
+ if (!config.allowDangerous && meta.safety === 'dangerous') {
187
+ return {
188
+ content: [{ type: 'text', text: `工具 "${toolName}" 已被 plugin-mcp-server 拒绝(dangerous)` }],
189
+ isError: true,
190
+ };
191
+ }
192
+ const callCtx = {
193
+ sessionId: 'mcp-server',
194
+ userId: 'mcp-client',
195
+ platform: 'mcp',
196
+ };
197
+ try {
198
+ const result = await tools.execute(toolName, args, callCtx);
199
+ return { content: [{ type: 'text', text: result }] };
200
+ }
201
+ catch (err) {
202
+ const msg = err instanceof Error ? err.message : String(err);
203
+ return { content: [{ type: 'text', text: `执行失败: ${msg}` }], isError: true };
204
+ }
205
+ });
206
+ return server;
207
+ }
208
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@aalis/plugin-mcp-server",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "keywords": [
6
+ "aalis-plugin"
7
+ ],
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "dependencies": {
14
+ "@modelcontextprotocol/sdk": "^1.0.4",
15
+ "@aalis/plugin-tools-api": "^0.1.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^22.0.0",
19
+ "typescript": "^5.7.0",
20
+ "@aalis/core": "0.1.0"
21
+ },
22
+ "peerDependencies": {
23
+ "@aalis/core": "^0.1.0"
24
+ },
25
+ "aalis": {
26
+ "service": {
27
+ "required": [
28
+ "tools"
29
+ ]
30
+ }
31
+ },
32
+ "scripts": {
33
+ "build": "tsc",
34
+ "dev": "tsc --watch"
35
+ }
36
+ }