@aalis/plugin-mcp-server 0.13.0 → 0.15.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 CHANGED
@@ -4,20 +4,21 @@
4
4
 
5
5
  ## 传输方式
6
6
 
7
- HTTP + SSE。Aalis 是常驻进程,stdio 已被日志占用,因此不走 Anthropic 默认的 stdio transport。
7
+ HTTP + SSE。Aalis 是常驻进程,stdio 已被日志占用,因此不使用 stdio 传输。
8
8
 
9
9
  - SSE endpoint: `http://<bind>:<port>/sse`
10
10
  - POST messages: `http://<bind>:<port>/messages`
11
11
 
12
- > SSE 同时只支持一个活跃连接(协议标准),新连接会挤掉旧连接。
12
+ > SSE 同时只支持一个活跃连接(协议标准),带对令牌的新连接会挤掉旧连接。
13
13
 
14
14
  ## 安全约束
15
15
 
16
16
  - 默认 `bind: 127.0.0.1`(仅本机访问)—— **不要随便暴露到公网**
17
+ - 每个请求要带 `Authorization: Bearer <token>`,否则回 401;这是静态令牌,不是 OAuth 授权,配不了请求头的客户端连不上
17
18
  - 默认 `allowRestricted: false`,可见性为 `restricted` 的工具一律拒绝
18
19
  - `ListTools` 与 `CallTool` 两端都过滤,防止 client 越界
19
20
  - `toolGroups` 白名单:仅暴露指定分组(空数组或 `['*']` = 全部允许,但仍受 `allowRestricted` 约束)
20
- - 必须是分组名的字符串数组;非数组、含非字符串元素(包括旧版 WebUI 存下的 `[{ name }]`)时记录错误且不启动
21
+ - 必须是分组名的字符串数组;非数组或含对象、布尔成员时激活失败、不监听,数字成员转成字符串分组名
21
22
  - 工具执行仍走 Aalis 的 `ToolService.execute`,因此 authority 注入的 ExecutionGuard 同样生效
22
23
 
23
24
  ## 配置示例
@@ -27,20 +28,22 @@ plugins:
27
28
  "@aalis/plugin-mcp-server":
28
29
  port: 39870
29
30
  bind: 127.0.0.1
31
+ token: "<至少 32 个可见 ASCII 字符的随机串>" # 密钥:启动时移进 secrets.yaml
30
32
  toolGroups:
31
33
  - search
32
34
  - system
33
35
  allowRestricted: false
34
36
  ```
35
37
 
36
- Claude Desktop 客户端配置(仅供参考;MCP client 配置因 host app 而异):
38
+ 以支持 HTTP+SSE 传输、能配请求头的 MCP client 为例(令牌是静态 Bearer 令牌,不走 OAuth;各 host 配置格式不同,以其文档为准;只认 URL 的客户端可以经能加请求头的本地桥接转发):
37
39
 
38
40
  ```json
39
41
  {
40
42
  "mcpServers": {
41
43
  "aalis": {
42
44
  "type": "sse",
43
- "url": "http://127.0.0.1:39870/sse"
45
+ "url": "http://127.0.0.1:39870/sse",
46
+ "headers": { "Authorization": "Bearer <令牌>" }
44
47
  }
45
48
  }
46
49
  }
@@ -56,7 +59,7 @@ Claude Desktop 客户端配置(仅供参考;MCP client 配置因 host app
56
59
  由于 MCP 协议不传递 session/user 概念,每次调用注入合成 `ToolCallContext`:
57
60
 
58
61
  ```ts
59
- { sessionId: 'mcp-server', userId: 'mcp-client', platform: 'mcp' }
62
+ { sessionId: 'mcp-server', userId: 'mcp-client', platform: 'mcp', participants: [{ platform: 'mcp', userId: 'mcp-client' }] }
60
63
  ```
61
64
 
62
65
  如果你的工具依赖 sessionId 做权限隔离,需自行处理 platform === 'mcp' 分支。
package/dist/index.d.ts CHANGED
@@ -4,8 +4,8 @@ import { Server as McpServer } from '@modelcontextprotocol/sdk/server/index.js';
4
4
  declare const configSchema: {
5
5
  readonly port: {
6
6
  readonly type: "number";
7
- readonly label: "监听端口";
8
- readonly description: "必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。";
7
+ readonly label: import("@aalis/schema-i18n").TextRef;
8
+ readonly description: import("@aalis/schema-i18n").TextRef;
9
9
  readonly default: 7861;
10
10
  readonly min: 1;
11
11
  readonly max: 65535;
@@ -14,14 +14,23 @@ declare const configSchema: {
14
14
  };
15
15
  readonly bind: {
16
16
  readonly type: "string";
17
- readonly label: "监听地址";
17
+ readonly label: import("@aalis/schema-i18n").TextRef;
18
18
  readonly default: "127.0.0.1";
19
19
  readonly onInvalid: "error";
20
20
  };
21
+ readonly token: {
22
+ readonly type: "string";
23
+ readonly label: import("@aalis/schema-i18n").TextRef;
24
+ readonly description: import("@aalis/schema-i18n").TextRef;
25
+ readonly required: true;
26
+ readonly secret: true;
27
+ readonly onInvalid: "error";
28
+ readonly validate: (value: unknown) => import("@aalis/schema-i18n").TextRef | undefined;
29
+ };
21
30
  readonly toolGroups: {
22
31
  readonly type: "multiselect";
23
- readonly label: "允许的工具分组(空=全部,受受限开关约束)";
24
- readonly description: "空列表或 ['*'] = 暴露所有分组的工具(仍受 allowRestricted 约束)。";
32
+ readonly label: import("@aalis/schema-i18n").TextRef;
33
+ readonly description: import("@aalis/schema-i18n").TextRef;
25
34
  readonly dynamicOptions: "toolGroups";
26
35
  readonly allowCustom: true;
27
36
  readonly default: readonly [];
@@ -29,7 +38,7 @@ declare const configSchema: {
29
38
  };
30
39
  readonly allowRestricted: {
31
40
  readonly type: "boolean";
32
- readonly label: "允许暴露 restricted(受限)工具";
41
+ readonly label: import("@aalis/schema-i18n").TextRef;
33
42
  readonly default: false;
34
43
  readonly onInvalid: "error";
35
44
  };
@@ -40,7 +49,7 @@ type Config = ConfigOf<typeof configSchema>;
40
49
  * 不绑定 transport;调用方负责 `server.connect(transport)`。
41
50
  * 导出以便集成测试通过 InMemoryTransport 直连,避开 HTTP/SSE 层。
42
51
  */
43
- export declare function buildMcpServer(tools: ToolService, config: Config): McpServer;
52
+ export declare function buildMcpServer(tools: ToolService, config: Pick<Config, 'allowRestricted' | 'toolGroups'>): McpServer;
44
53
  declare const _default: import("@aalis/core").PluginDefinition<{
45
54
  tools: import("@aalis/core").ServiceDescriptor<ToolService, import("@aalis/api-tools").BoundTools>;
46
55
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAwB,KAAK,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AAQjG,OAAO,EAAE,KAAK,QAAQ,EAA0C,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAIhF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhB,CAAC;AACH,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AA4G5C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAmE5E;;;;;;;AAED,wBAOG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAwB,KAAK,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AAQjG,OAAO,EAAE,KAAK,QAAQ,EAA0C,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAKhF,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChB,CAAC;AACH,KAAK,MAAM,GAAG,QAAQ,CAAC,OAAO,YAAY,CAAC,CAAC;AAyI5C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,YAAY,CAAC,GAAG,SAAS,CAiEpH;;;;;;;AAED,wBAOG"}
package/dist/index.js CHANGED
@@ -11,7 +11,9 @@
11
11
  * - 默认拒绝 visibility='restricted' 的工具暴露;config.allowRestricted 可改
12
12
  * - config.toolGroups 白名单:仅暴露指定分组(空数组=全部允许)
13
13
  * - config.bind 默认 127.0.0.1(仅本机访问)
14
+ * - 每个请求要带 Authorization: Bearer <token>(必填的密钥字段),不对回 401
14
15
  */
16
+ import { createHash, timingSafeEqual } from 'node:crypto';
15
17
  import { createServer } from 'node:http';
16
18
  import { tools as toolsService } from '@aalis/api-tools';
17
19
  import { config as configService, definePlugin, lifecycle as lifecycleService, logger as loggerService, } from '@aalis/core';
@@ -19,22 +21,33 @@ import { configError, defineConfig, parseConfig } from '@aalis/schema-config';
19
21
  import { Server as McpServer } from '@modelcontextprotocol/sdk/server/index.js';
20
22
  import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
21
23
  import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
24
+ import { t } from './texts.js';
22
25
  const configSchema = defineConfig({
23
26
  port: {
24
27
  type: 'number',
25
- label: '监听端口',
26
- description: '必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。',
28
+ label: t('portLabel'),
29
+ description: t('portDescription'),
27
30
  default: 7861,
28
31
  min: 1,
29
32
  max: 65535,
30
33
  integer: true,
31
34
  onInvalid: 'error',
32
35
  },
33
- bind: { type: 'string', label: '监听地址', default: '127.0.0.1', onInvalid: 'error' },
36
+ bind: { type: 'string', label: t('bindLabel'), default: '127.0.0.1', onInvalid: 'error' },
37
+ token: {
38
+ type: 'string',
39
+ label: t('tokenLabel'),
40
+ description: t('tokenDescription'),
41
+ required: true,
42
+ secret: true,
43
+ onInvalid: 'error',
44
+ // 持有令牌就能调暴露的工具,防猜靠令牌够长:32 个字符起,与 webui-server 的固定 token 同一下限;要放进请求头,只收可见 ASCII
45
+ validate: value => (/^[\x21-\x7E]{32,}$/.test(String(value)) ? undefined : t('tokenInvalid')),
46
+ },
34
47
  toolGroups: {
35
48
  type: 'multiselect',
36
- label: '允许的工具分组(空=全部,受受限开关约束)',
37
- description: "空列表或 ['*'] = 暴露所有分组的工具(仍受 allowRestricted 约束)。",
49
+ label: t('toolGroupsLabel'),
50
+ description: t('toolGroupsDescription'),
38
51
  dynamicOptions: 'toolGroups',
39
52
  allowCustom: true,
40
53
  default: [],
@@ -42,11 +55,26 @@ const configSchema = defineConfig({
42
55
  },
43
56
  allowRestricted: {
44
57
  type: 'boolean',
45
- label: '允许暴露 restricted(受限)工具',
58
+ label: t('allowRestrictedLabel'),
46
59
  default: false,
47
60
  onInvalid: 'error',
48
61
  },
49
62
  });
63
+ /** 带了 Bearer 令牌、令牌却不对 */
64
+ const WRONG_TOKEN = '令牌不对';
65
+ /**
66
+ * 请求带的令牌对不对:Authorization 要是「Bearer <令牌>」(方案名不分大小写,后面的空格可以不止一个)。不对时交回原因(写进
67
+ * debug 日志,不含令牌),对时为 undefined。两边先取 SHA-256 摘要再定时比较,耗时与令牌的内容和长度无关
68
+ */
69
+ function rejectReason(header, token) {
70
+ if (!header)
71
+ return '没带 Authorization';
72
+ const given = /^bearer +(.+)$/i.exec(header)?.[1];
73
+ if (given === undefined)
74
+ return '方案不是 Bearer';
75
+ const digest = (s) => createHash('sha256').update(s).digest();
76
+ return timingSafeEqual(digest(given), digest(token)) ? undefined : WRONG_TOKEN;
77
+ }
50
78
  const uses = {
51
79
  tools: toolsService,
52
80
  logger: loggerService,
@@ -54,9 +82,9 @@ const uses = {
54
82
  config: configService,
55
83
  };
56
84
  async function run({ tools, logger, lifecycle, config: rawConfig }) {
57
- const config = parseConfig(configSchema, rawConfig, logger);
85
+ const config = parseConfig(configSchema, rawConfig.use, logger.use);
58
86
  if (!config.bind.trim())
59
- throw configError('bind 不能为空');
87
+ throw configError(t('bindEmpty'));
60
88
  // SSE 同时只支持一个活跃连接(标准约束);新连接挤掉旧的
61
89
  let currentTransport;
62
90
  let mcpServer;
@@ -70,22 +98,31 @@ async function run({ tools, logger, lifecycle, config: rawConfig }) {
70
98
  catch (err) {
71
99
  // 回调是 async 且这里是它唯一的出口:漏一个异常就是一条 unhandledRejection,
72
100
  // 而 runtime 的处理器会判致命并结束进程(webui 走 express 自带兜底,这条没有)。
73
- logger.warn(`MCP 请求处理失败: ${err instanceof Error ? err.message : String(err)}`);
101
+ logger.use.warn(`MCP 请求处理失败: ${err instanceof Error ? err.message : String(err)}`);
74
102
  if (!res.headersSent)
75
103
  res.writeHead(500, { 'content-type': 'application/json' });
76
104
  res.end(JSON.stringify({ error: 'internal' }));
77
105
  }
78
106
  });
79
107
  async function handle(req, res, url) {
108
+ const rejected = rejectReason(req.headers.authorization, config.token);
109
+ if (rejected) {
110
+ logger.use.debug(`MCP 请求未通过认证(${rejected}):${req.method} ${url.pathname}`);
111
+ // RFC 6750 第 3.1 节:只有令牌不对时质询带错误码,没带认证信息、方案不支持时不带
112
+ const challenge = rejected === WRONG_TOKEN ? 'Bearer error="invalid_token"' : 'Bearer';
113
+ res.writeHead(401, { 'content-type': 'application/json', 'www-authenticate': challenge });
114
+ res.end(JSON.stringify({ error: 'invalid_token', error_description: 'missing or invalid bearer token' }));
115
+ return;
116
+ }
80
117
  if (req.method === 'GET' && url.pathname === '/sse') {
81
118
  // 每条新连接按当前提供者构建:工具服务换人之后连上来的 client 直接用新实例。
82
119
  // 提供者短暂缺席(换人的空档)时不建会话,让 client 重连。
83
- const toolService = tools.current;
84
- if (!toolService) {
120
+ if (!tools.present) {
85
121
  res.writeHead(503, { 'content-type': 'application/json' });
86
122
  res.end(JSON.stringify({ error: 'tools service unavailable' }));
87
123
  return;
88
124
  }
125
+ const toolService = tools.use;
89
126
  // 新 SSE 连接
90
127
  if (currentTransport) {
91
128
  try {
@@ -99,12 +136,12 @@ async function run({ tools, logger, lifecycle, config: rawConfig }) {
99
136
  currentTransport = transport;
100
137
  mcpServer = buildMcpServer(toolService, config);
101
138
  await mcpServer.connect(transport);
102
- logger.info('MCP client 已通过 SSE 连接');
139
+ logger.use.info('MCP client 已通过 SSE 连接');
103
140
  req.on('close', () => {
104
141
  if (currentTransport === transport) {
105
142
  currentTransport = undefined;
106
143
  mcpServer = undefined;
107
- logger.info('MCP client 已断开');
144
+ logger.use.info('MCP client 已断开');
108
145
  }
109
146
  });
110
147
  return;
@@ -128,8 +165,8 @@ async function run({ tools, logger, lifecycle, config: rawConfig }) {
128
165
  resolve();
129
166
  });
130
167
  });
131
- logger.info(`MCP server 监听 http://${config.bind}:${config.port}/sse (allowRestricted=${config.allowRestricted}, groups=${config.toolGroups.length === 0 ? '*' : config.toolGroups.join(',')})`);
132
- lifecycle.onDispose(async () => {
168
+ logger.use.info(`MCP server 监听 http://${config.bind}:${config.port}/sse (allowRestricted=${config.allowRestricted}, groups=${config.toolGroups.length === 0 ? '*' : config.toolGroups.join(',')})`);
169
+ lifecycle.use.onDispose(async () => {
133
170
  if (currentTransport) {
134
171
  try {
135
172
  await currentTransport.close();
@@ -138,8 +175,12 @@ async function run({ tools, logger, lifecycle, config: rawConfig }) {
138
175
  /* ignore */
139
176
  }
140
177
  }
141
- await new Promise(resolve => httpServer.close(() => resolve()));
142
- logger.info('MCP server 已停止');
178
+ await new Promise(resolve => {
179
+ httpServer.close(() => resolve());
180
+ // close() 只关闲着的连接,客户端开着却还没发请求的连接要等对端自己断:一并断开,停用不等它们
181
+ httpServer.closeAllConnections();
182
+ });
183
+ logger.use.info('MCP server 已停止');
143
184
  });
144
185
  }
145
186
  /**
@@ -192,11 +233,9 @@ export function buildMcpServer(tools, config) {
192
233
  isError: true,
193
234
  };
194
235
  }
195
- const callCtx = {
196
- sessionId: 'mcp-server',
197
- userId: 'mcp-client',
198
- platform: 'mcp',
199
- };
236
+ // 参与者是 MCP 客户端自己:等级按 mcp:mcp-client 这个身份裁决
237
+ const client = { platform: 'mcp', userId: 'mcp-client' };
238
+ const callCtx = { sessionId: 'mcp-server', ...client, participants: [client] };
200
239
  try {
201
240
  const result = await tools.execute(toolName, args, callCtx);
202
241
  // MCP 侧只透传文本:工具交给主模型看的图(images)是 agent 回合内的载荷,不在此暴露
@@ -211,7 +250,7 @@ export function buildMcpServer(tools, config) {
211
250
  }
212
251
  export default definePlugin({
213
252
  name: '@aalis/plugin-mcp-server',
214
- displayName: 'MCP 服务端',
253
+ displayName: t('displayName'),
215
254
  subsystem: 'tools',
216
255
  configSchema,
217
256
  uses,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ declare const _default: {
2
+ readonly displayName: "MCP server";
3
+ readonly portLabel: "Listening port";
4
+ readonly portDescription: "Must be 1-65535; an invalid value is reported as an error and the server does not start. To pause the service, disable this plugin in the plugin list.";
5
+ readonly bindLabel: "Listening address";
6
+ readonly bindEmpty: "bind must not be empty";
7
+ readonly tokenLabel: "Access token";
8
+ readonly tokenDescription: "External MCP clients connecting to /sse and /messages must send the header Authorization: Bearer <token>. At least 32 visible ASCII characters with no whitespace; can be generated with openssl rand -hex 32. Stored in the secret store, and the WebUI does not show it back";
9
+ readonly tokenInvalid: "must be at least 32 visible ASCII characters (no whitespace)";
10
+ readonly toolGroupsLabel: "Allowed tool groups (empty = all, subject to the restricted switch)";
11
+ readonly toolGroupsDescription: "An empty list or ['*'] = expose tools of all groups (still subject to allowRestricted).";
12
+ readonly allowRestrictedLabel: "Allow exposing restricted tools";
13
+ };
14
+ export default _default;
15
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAGA,wBAcG"}
@@ -0,0 +1,15 @@
1
+ import { defineLocale } from '@aalis/schema-i18n';
2
+ export default defineLocale()({
3
+ displayName: 'MCP server',
4
+ portLabel: 'Listening port',
5
+ portDescription: 'Must be 1-65535; an invalid value is reported as an error and the server does not start. To pause the service, disable this plugin in the plugin list.',
6
+ bindLabel: 'Listening address',
7
+ bindEmpty: 'bind must not be empty',
8
+ tokenLabel: 'Access token',
9
+ tokenDescription: 'External MCP clients connecting to /sse and /messages must send the header Authorization: Bearer <token>. At least 32 visible ASCII characters with no whitespace; can be generated with openssl rand -hex 32. Stored in the secret store, and the WebUI does not show it back',
10
+ tokenInvalid: 'must be at least 32 visible ASCII characters (no whitespace)',
11
+ toolGroupsLabel: 'Allowed tool groups (empty = all, subject to the restricted switch)',
12
+ toolGroupsDescription: "An empty list or ['*'] = expose tools of all groups (still subject to allowRestricted).",
13
+ allowRestrictedLabel: 'Allow exposing restricted tools',
14
+ });
15
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAe,YAAY,EAAU,CAAC;IACpC,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,gBAAgB;IAC3B,eAAe,EACb,wJAAwJ;IAC1J,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAE,wBAAwB;IACnC,UAAU,EAAE,cAAc;IAC1B,gBAAgB,EACd,gRAAgR;IAClR,YAAY,EAAE,8DAA8D;IAC5E,eAAe,EAAE,qEAAqE;IACtF,qBAAqB,EAAE,yFAAyF;IAChH,oBAAoB,EAAE,iCAAiC;CACxD,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ declare const SOURCE: {
2
+ readonly displayName: "MCP 服务端";
3
+ readonly portLabel: "监听端口";
4
+ readonly portDescription: "必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。";
5
+ readonly bindLabel: "监听地址";
6
+ readonly bindEmpty: "bind 不能为空";
7
+ readonly tokenLabel: "访问令牌";
8
+ readonly tokenDescription: "外部 MCP 客户端连 /sse 与 /messages 时要带请求头 Authorization: Bearer <令牌>。至少 32 个可见 ASCII 字符、不含空白,可用 openssl rand -hex 32 生成;存进密钥存储,WebUI 不回显";
9
+ readonly tokenInvalid: "至少 32 个可见 ASCII 字符(不含空白)";
10
+ readonly toolGroupsLabel: "允许的工具分组(空=全部,受受限开关约束)";
11
+ readonly toolGroupsDescription: "空列表或 ['*'] = 暴露所有分组的工具(仍受 allowRestricted 约束)。";
12
+ readonly allowRestrictedLabel: "允许暴露 restricted(受限)工具";
13
+ };
14
+ export type Source = typeof SOURCE;
15
+ export declare const t: import("@aalis/schema-i18n").TextFactory<{
16
+ readonly displayName: "MCP 服务端";
17
+ readonly portLabel: "监听端口";
18
+ readonly portDescription: "必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。";
19
+ readonly bindLabel: "监听地址";
20
+ readonly bindEmpty: "bind 不能为空";
21
+ readonly tokenLabel: "访问令牌";
22
+ readonly tokenDescription: "外部 MCP 客户端连 /sse 与 /messages 时要带请求头 Authorization: Bearer <令牌>。至少 32 个可见 ASCII 字符、不含空白,可用 openssl rand -hex 32 生成;存进密钥存储,WebUI 不回显";
23
+ readonly tokenInvalid: "至少 32 个可见 ASCII 字符(不含空白)";
24
+ readonly toolGroupsLabel: "允许的工具分组(空=全部,受受限开关约束)";
25
+ readonly toolGroupsDescription: "空列表或 ['*'] = 暴露所有分组的工具(仍受 allowRestricted 约束)。";
26
+ readonly allowRestrictedLabel: "允许暴露 restricted(受限)工具";
27
+ }>;
28
+ export {};
29
+ //# sourceMappingURL=texts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;;;;;;;;;CAaF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;;;;;;;;;EAKZ,CAAC"}
package/dist/texts.js ADDED
@@ -0,0 +1,23 @@
1
+ // 本插件自己的原文字典:显示名、配置项与令牌的校验原因、配置报错
2
+ import { defineTexts } from '@aalis/schema-i18n';
3
+ import en from './locales/en.js';
4
+ const SOURCE = {
5
+ displayName: 'MCP 服务端',
6
+ portLabel: '监听端口',
7
+ portDescription: '必须 1-65535;非法值会报错不启动。要暂停服务请在「插件列表」里禁用本插件。',
8
+ bindLabel: '监听地址',
9
+ bindEmpty: 'bind 不能为空',
10
+ tokenLabel: '访问令牌',
11
+ tokenDescription: '外部 MCP 客户端连 /sse 与 /messages 时要带请求头 Authorization: Bearer <令牌>。至少 32 个可见 ASCII 字符、不含空白,可用 openssl rand -hex 32 生成;存进密钥存储,WebUI 不回显',
12
+ tokenInvalid: '至少 32 个可见 ASCII 字符(不含空白)',
13
+ toolGroupsLabel: '允许的工具分组(空=全部,受受限开关约束)',
14
+ toolGroupsDescription: "空列表或 ['*'] = 暴露所有分组的工具(仍受 allowRestricted 约束)。",
15
+ allowRestrictedLabel: '允许暴露 restricted(受限)工具',
16
+ };
17
+ export const t = defineTexts({
18
+ ns: '@aalis/plugin-mcp-server',
19
+ language: 'zh-CN',
20
+ source: SOURCE,
21
+ locales: { en },
22
+ });
23
+ //# sourceMappingURL=texts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,MAAM;IACjB,eAAe,EAAE,2CAA2C;IAC5D,SAAS,EAAE,MAAM;IACjB,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,MAAM;IAClB,gBAAgB,EACd,oIAAoI;IACtI,YAAY,EAAE,0BAA0B;IACxC,eAAe,EAAE,uBAAuB;IACxC,qBAAqB,EAAE,gDAAgD;IACvE,oBAAoB,EAAE,uBAAuB;CACrC,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IAC3B,EAAE,EAAE,0BAA0B;IAC9B,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,EAAE,EAAE,EAAE;CAChB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-mcp-server",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,17 +24,18 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@aalis/schema-config": ">=0.14.0 <1.0.0",
28
- "@aalis/api-tools": ">=0.10.0 <1.0.0",
27
+ "@aalis/schema-config": ">=0.16.0 <1.0.0",
28
+ "@aalis/schema-i18n": ">=0.1.0 <1.0.0",
29
+ "@aalis/api-tools": ">=0.12.0 <1.0.0",
29
30
  "@modelcontextprotocol/sdk": "^1.29.0"
30
31
  },
31
32
  "devDependencies": {
32
33
  "@types/node": "^22.0.0",
33
34
  "typescript": "^5.7.0",
34
- "@aalis/core": "0.19.1"
35
+ "@aalis/core": "0.21.0"
35
36
  },
36
37
  "peerDependencies": {
37
- "@aalis/core": ">=0.18.0 <1.0.0"
38
+ "@aalis/core": ">=0.21.0 <1.0.0"
38
39
  },
39
40
  "aalis": {
40
41
  "service": {