appium-mcp 1.80.0 → 1.81.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +9 -3
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +1 -0
- package/dist/core.js.map +1 -1
- package/dist/create-server.d.ts +8 -0
- package/dist/create-server.d.ts.map +1 -1
- package/dist/create-server.js +3 -1
- package/dist/create-server.js.map +1 -1
- package/dist/plugin.d.ts +8 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +6 -0
- package/dist/plugin.js.map +1 -1
- package/dist/policy.d.ts +17 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +137 -0
- package/dist/policy.js.map +1 -0
- package/dist/tests/create-server.test.js +276 -1
- package/dist/tests/create-server.test.js.map +1 -1
- package/dist/tests/plugin.test.js +16 -0
- package/dist/tests/plugin.test.js.map +1 -1
- package/dist/tests/policy.test.d.ts +2 -0
- package/dist/tests/policy.test.d.ts.map +1 -0
- package/dist/tests/policy.test.js +44 -0
- package/dist/tests/policy.test.js.map +1 -0
- package/dist/tools/documentation/markdown-header-splitter.d.ts.map +1 -1
- package/dist/tools/documentation/markdown-header-splitter.js +67 -67
- package/dist/tools/documentation/markdown-header-splitter.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/core.ts +7 -0
- package/src/create-server.ts +12 -0
- package/src/plugin.ts +17 -0
- package/src/policy.ts +230 -0
- package/src/resources/submodules.zip +0 -0
- package/src/tools/documentation/markdown-header-splitter.ts +82 -82
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [1.81.1](https://github.com/appium/appium-mcp/compare/v1.81.0...v1.81.1) (2026-05-29)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* fix potential before/after hook issue, correct documentation ([#373](https://github.com/appium/appium-mcp/issues/373)) ([16a1ad0](https://github.com/appium/appium-mcp/commit/16a1ad0f88e52c936bf7fb41adfdc0ed9fc8f051))
|
|
6
|
+
|
|
7
|
+
## [1.81.0](https://github.com/appium/appium-mcp/compare/v1.80.0...v1.81.0) (2026-05-29)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add lightweight allowlist policy ([#369](https://github.com/appium/appium-mcp/issues/369)) ([2a52174](https://github.com/appium/appium-mcp/commit/2a52174cea59d02333c0af86cf3faa5a4ccf8715))
|
|
12
|
+
|
|
1
13
|
## [1.80.0](https://github.com/appium/appium-mcp/compare/v1.79.1...v1.80.0) (2026-05-28)
|
|
2
14
|
|
|
3
15
|
### Features
|
package/README.md
CHANGED
|
@@ -339,7 +339,9 @@ HTTP and streamable MCP clients may **disconnect briefly** (reconnect, reload, p
|
|
|
339
339
|
|
|
340
340
|
## 🔌 Plugin API
|
|
341
341
|
|
|
342
|
-
Use `appium-mcp/core` to compose the default Appium MCP server with custom business logic without maintaining a fork. Plugins can register MCP tools, prompts, resources, and resource templates, and can wrap tool execution with lifecycle hooks.
|
|
342
|
+
Use `appium-mcp/core` to compose the default Appium MCP server with custom business logic without maintaining a fork. Plugins can register MCP tools, prompts, resources, and resource templates, and can wrap tool execution with lifecycle hooks. Call hooks are tool-only: prompts, resources, and resource templates are registered with FastMCP but are not wrapped by `beforeCall` or `afterCall`.
|
|
343
|
+
|
|
344
|
+
`createAppiumMcpServer({ policy })` can also hide nonmatching tools and resources from MCP discovery. Policy rules are regular expressions matched against tool and resource names exactly as registered. The policy is applied at registration time to both single and batch registration methods. Resource policy matches the resource `name` only; resources or resource templates without a string `name` cannot match a non-empty `allowResources` list.
|
|
343
345
|
|
|
344
346
|
```ts
|
|
345
347
|
import { createAppiumMcpServer } from 'appium-mcp/core';
|
|
@@ -375,6 +377,10 @@ class CheckoutPlugin implements AppiumMcpPlugin {
|
|
|
375
377
|
const server = createAppiumMcpServer({
|
|
376
378
|
plugins: [new CheckoutPlugin()],
|
|
377
379
|
additionalInstructions: 'Custom checkout policies are active.',
|
|
380
|
+
policy: {
|
|
381
|
+
allowTools: [/^appium_session_management$/, /^assert_checkout_summary$/],
|
|
382
|
+
allowResources: [/^Generate Code With Locators$/],
|
|
383
|
+
},
|
|
378
384
|
});
|
|
379
385
|
|
|
380
386
|
await server.start({ transportType: 'stdio' });
|
|
@@ -384,8 +390,8 @@ Plugin lifecycle:
|
|
|
384
390
|
|
|
385
391
|
- `register(registry, core)`: called during server construction. Register custom tools, prompts, resources, and resource templates here.
|
|
386
392
|
- `initialize(ctx)`: called lazily on the first MCP client connection. Use it for async setup such as artifact storage or internal service clients.
|
|
387
|
-
- `beforeCall(ctx)`: called before a registered MCP tool executes. Return a `ToolCallResult` to short-circuit the tool.
|
|
388
|
-
- `afterCall(ctx, result)`: called after a registered MCP tool executes. Return a modified `ToolCallResult` to decorate or replace the response.
|
|
393
|
+
- `beforeCall(ctx)`: called before a registered MCP tool executes. Return a `ToolCallResult` to short-circuit the tool. This hook only applies to tools, not prompts, resources, or resource templates.
|
|
394
|
+
- `afterCall(ctx, result)`: called after a registered MCP tool executes. Return a modified `ToolCallResult` to decorate or replace the response. This hook only applies to tools, not prompts, resources, or resource templates.
|
|
389
395
|
- `destroy()`: called after the last MCP client disconnects.
|
|
390
396
|
|
|
391
397
|
### Safe plugin surface
|
package/dist/core.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
9
|
export type { CreateAppiumMcpServerOptions } from './create-server.js';
|
|
10
|
+
export { evaluatePolicyTarget } from './policy.js';
|
|
11
|
+
export type { AppiumMcpPolicy, PolicyDecision, PolicyDecisionReason, PolicyTargetKind, } from './policy.js';
|
|
10
12
|
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
11
13
|
export type { AppiumMcpPlugin, PluginContext, PluginSessionContext, ToolCallContext, ToolCallResult, VerificationDuplicate, VerificationDuplicateKind, VerificationEntry, VerificationReport, VerifyAppiumMcpNamesOptions, } from './plugin.js';
|
|
12
14
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,aAAa,CAAC"}
|
package/dist/core.js
CHANGED
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
* hooks.
|
|
7
7
|
*/
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
|
+
export { evaluatePolicyTarget } from './policy.js';
|
|
9
10
|
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
10
11
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOnD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
package/dist/create-server.d.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { FastMCP } from 'fastmcp';
|
|
16
16
|
import type { AppiumMcpPlugin } from './plugin.js';
|
|
17
|
+
import { type AppiumMcpPolicy } from './policy.js';
|
|
17
18
|
export interface CreateAppiumMcpServerOptions {
|
|
18
19
|
/**
|
|
19
20
|
* List of plugins to register with the server.
|
|
@@ -35,6 +36,13 @@ export interface CreateAppiumMcpServerOptions {
|
|
|
35
36
|
* Additional instructions appended to the default SERVER_INSTRUCTIONS.
|
|
36
37
|
*/
|
|
37
38
|
additionalInstructions?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Lightweight allowlist policy for registered tools and resources.
|
|
41
|
+
*
|
|
42
|
+
* Empty allowlists allow all matching target kinds. Non-empty allowlists hide
|
|
43
|
+
* nonmatching capabilities from discovery by skipping registration.
|
|
44
|
+
*/
|
|
45
|
+
policy?: AppiumMcpPolicy;
|
|
38
46
|
}
|
|
39
47
|
/**
|
|
40
48
|
* Factory function that creates and wires a fully-configured Appium MCP server,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAalE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAkKT"}
|
package/dist/create-server.js
CHANGED
|
@@ -19,6 +19,7 @@ import registerResources from './resources/index.js';
|
|
|
19
19
|
import { safeDeleteAllSessions, listSessions } from './session-store.js';
|
|
20
20
|
import log from './logger.js';
|
|
21
21
|
import { PluginManager } from './plugin.js';
|
|
22
|
+
import { installPolicy } from './policy.js';
|
|
22
23
|
const SERVER_VERSION = pkg.version;
|
|
23
24
|
const SERVER_INSTRUCTIONS = [
|
|
24
25
|
'Appium mobile automation through MCP. Defaults that avoid broken flows:',
|
|
@@ -42,7 +43,7 @@ const SERVER_INSTRUCTIONS = [
|
|
|
42
43
|
* @returns A configured `FastMCP` instance ready to be `start()`-ed.
|
|
43
44
|
*/
|
|
44
45
|
export function createAppiumMcpServer(options = {}) {
|
|
45
|
-
const { plugins = [], serverName = 'MCP Appium', serverVersion = SERVER_VERSION, additionalInstructions, } = options;
|
|
46
|
+
const { plugins = [], serverName = 'MCP Appium', serverVersion = SERVER_VERSION, additionalInstructions, policy, } = options;
|
|
46
47
|
const instructions = additionalInstructions
|
|
47
48
|
? `${SERVER_INSTRUCTIONS}\n${additionalInstructions}`
|
|
48
49
|
: SERVER_INSTRUCTIONS;
|
|
@@ -51,6 +52,7 @@ export function createAppiumMcpServer(options = {}) {
|
|
|
51
52
|
version: serverVersion,
|
|
52
53
|
instructions,
|
|
53
54
|
});
|
|
55
|
+
installPolicy(server, policy);
|
|
54
56
|
// -------------------------------------------------------------------------
|
|
55
57
|
// 1. Install plugin hooks BEFORE registering any tools so that every built-in
|
|
56
58
|
// and plugin tool is wrapped with beforeCall / afterCall.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -57,7 +57,15 @@ export interface AppiumMcpPlugin {
|
|
|
57
57
|
readonly version: string;
|
|
58
58
|
initialize?(ctx: PluginContext): Promise<void>;
|
|
59
59
|
register?(registry: McpRegistry, core: AppiumMcpCore): void;
|
|
60
|
+
/**
|
|
61
|
+
* Tool-only hook. Prompts, resources, and resource templates are registered
|
|
62
|
+
* through FastMCP but are not wrapped by plugin call hooks.
|
|
63
|
+
*/
|
|
60
64
|
beforeCall?(ctx: ToolCallContext): Promise<ToolCallResult | void>;
|
|
65
|
+
/**
|
|
66
|
+
* Tool-only hook. Prompts, resources, and resource templates are registered
|
|
67
|
+
* through FastMCP but are not wrapped by plugin call hooks.
|
|
68
|
+
*/
|
|
61
69
|
afterCall?(ctx: ToolCallContext, result: ToolCallResult): Promise<ToolCallResult | void>;
|
|
62
70
|
destroy?(): Promise<void>;
|
|
63
71
|
}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,OAAO,EACP,kBAAkB,EAClB,IAAI,EACJ,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAIL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACxD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACvD,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACrD,YAAY,IAAI,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5D,UAAU,CAAC,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,SAAS,CAAC,CACR,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,yBAAyB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -236,6 +236,12 @@ export class PluginManager {
|
|
|
236
236
|
};
|
|
237
237
|
return originalAddTool({ ...toolDef, execute: wrappedExecute });
|
|
238
238
|
};
|
|
239
|
+
// Keep batch tool registration on the same hook-wrapped path as addTool.
|
|
240
|
+
this.server.addTools = (toolDefs) => {
|
|
241
|
+
for (const toolDef of toolDefs) {
|
|
242
|
+
this.server.addTool(toolDef);
|
|
243
|
+
}
|
|
244
|
+
};
|
|
239
245
|
}
|
|
240
246
|
}
|
|
241
247
|
/**
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FastMCP } from 'fastmcp';
|
|
2
|
+
export interface AppiumMcpPolicy {
|
|
3
|
+
allowTools?: readonly RegExp[];
|
|
4
|
+
allowResources?: readonly RegExp[];
|
|
5
|
+
}
|
|
6
|
+
export type PolicyTargetKind = 'tool' | 'resource';
|
|
7
|
+
export type PolicyDecisionReason = 'empty_allowlist' | 'matched_allowlist' | 'not_in_allowlist';
|
|
8
|
+
export interface PolicyDecision {
|
|
9
|
+
allowed: boolean;
|
|
10
|
+
reason: PolicyDecisionReason;
|
|
11
|
+
targetKind: PolicyTargetKind;
|
|
12
|
+
target: string;
|
|
13
|
+
matchedRule?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function evaluatePolicyTarget(policy: AppiumMcpPolicy | undefined, targetKind: PolicyTargetKind, target: string): PolicyDecision;
|
|
16
|
+
export declare function installPolicy(server: FastMCP, policy?: AppiumMcpPolicy): void;
|
|
17
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAUD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,GAAG,SAAS,EACnC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,MAAM,GACb,cAAc,CA+BhB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CA0E7E"}
|
package/dist/policy.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import log from './logger.js';
|
|
2
|
+
export function evaluatePolicyTarget(policy, targetKind, target) {
|
|
3
|
+
const allowlist = targetKind === 'tool' ? policy?.allowTools : policy?.allowResources;
|
|
4
|
+
if (!allowlist || allowlist.length === 0) {
|
|
5
|
+
return {
|
|
6
|
+
allowed: true,
|
|
7
|
+
reason: 'empty_allowlist',
|
|
8
|
+
targetKind,
|
|
9
|
+
target,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
for (const rule of allowlist) {
|
|
13
|
+
if (matchesRule(rule, target)) {
|
|
14
|
+
return {
|
|
15
|
+
allowed: true,
|
|
16
|
+
reason: 'matched_allowlist',
|
|
17
|
+
targetKind,
|
|
18
|
+
target,
|
|
19
|
+
matchedRule: rule.toString(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
allowed: false,
|
|
25
|
+
reason: 'not_in_allowlist',
|
|
26
|
+
targetKind,
|
|
27
|
+
target,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function installPolicy(server, policy) {
|
|
31
|
+
if (!policy) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
validatePolicy(policy);
|
|
35
|
+
const originalAddTool = server.addTool.bind(server);
|
|
36
|
+
server.addTool = ((toolDef) => {
|
|
37
|
+
if (!isToolAllowed(policy, toolDef)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
return originalAddTool(toolDef);
|
|
41
|
+
});
|
|
42
|
+
const originalAddTools = server.addTools.bind(server);
|
|
43
|
+
server.addTools = ((toolDefs) => {
|
|
44
|
+
const allowedToolDefs = toolDefs.filter((toolDef) => isToolAllowed(policy, toolDef));
|
|
45
|
+
if (allowedToolDefs.length === 0) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
return originalAddTools(allowedToolDefs);
|
|
49
|
+
});
|
|
50
|
+
const originalAddResource = server.addResource.bind(server);
|
|
51
|
+
server.addResource = ((resourceDef) => {
|
|
52
|
+
if (!isResourceAllowed(policy, resourceDef, 'resource')) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
return originalAddResource(resourceDef);
|
|
56
|
+
});
|
|
57
|
+
const originalAddResources = server.addResources.bind(server);
|
|
58
|
+
server.addResources = ((resourceDefs) => {
|
|
59
|
+
const allowedResourceDefs = resourceDefs.filter((resourceDef) => isResourceAllowed(policy, resourceDef, 'resource'));
|
|
60
|
+
if (allowedResourceDefs.length === 0) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
return originalAddResources(allowedResourceDefs);
|
|
64
|
+
});
|
|
65
|
+
const originalAddResourceTemplate = server.addResourceTemplate.bind(server);
|
|
66
|
+
server.addResourceTemplate = ((resourceTemplateDef) => {
|
|
67
|
+
if (!isResourceAllowed(policy, resourceTemplateDef, 'resource template')) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
return originalAddResourceTemplate(resourceTemplateDef);
|
|
71
|
+
});
|
|
72
|
+
const originalAddResourceTemplates = server.addResourceTemplates.bind(server);
|
|
73
|
+
server.addResourceTemplates = ((resourceTemplateDefs) => {
|
|
74
|
+
const allowedResourceTemplateDefs = resourceTemplateDefs.filter((resourceTemplateDef) => isResourceAllowed(policy, resourceTemplateDef, 'resource template'));
|
|
75
|
+
if (allowedResourceTemplateDefs.length === 0) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return originalAddResourceTemplates(allowedResourceTemplateDefs);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function isToolAllowed(policy, toolDef) {
|
|
82
|
+
const decision = evaluatePolicyTarget(policy, 'tool', toolDef.name);
|
|
83
|
+
if (!decision.allowed) {
|
|
84
|
+
log.warn(`Policy denied tool registration: ${formatPolicyTargetForLog(decision.target)} (${decision.reason})`);
|
|
85
|
+
}
|
|
86
|
+
return decision.allowed;
|
|
87
|
+
}
|
|
88
|
+
function isResourceAllowed(policy, resourceDef, label) {
|
|
89
|
+
const target = readResourceName(resourceDef);
|
|
90
|
+
const decision = evaluatePolicyTarget(policy, 'resource', target);
|
|
91
|
+
if (!decision.allowed) {
|
|
92
|
+
log.warn(`Policy denied ${label} registration: ${formatResourceTargetForLog(resourceDef, decision.target)} (${decision.reason})`);
|
|
93
|
+
}
|
|
94
|
+
return decision.allowed;
|
|
95
|
+
}
|
|
96
|
+
function matchesRule(rule, target) {
|
|
97
|
+
return new RegExp(rule.source, rule.flags).test(target);
|
|
98
|
+
}
|
|
99
|
+
function validatePolicy(policy) {
|
|
100
|
+
validateAllowlist(policy.allowTools, 'policy.allowTools');
|
|
101
|
+
validateAllowlist(policy.allowResources, 'policy.allowResources');
|
|
102
|
+
}
|
|
103
|
+
function validateAllowlist(allowlist, label) {
|
|
104
|
+
if (allowlist === undefined) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!Array.isArray(allowlist)) {
|
|
108
|
+
throw new TypeError(`${label} must be an array of RegExp values`);
|
|
109
|
+
}
|
|
110
|
+
for (const rule of allowlist) {
|
|
111
|
+
if (!(rule instanceof RegExp)) {
|
|
112
|
+
throw new TypeError(`${label} must contain only RegExp values`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function formatPolicyTargetForLog(target) {
|
|
117
|
+
return target.length > 0 ? target : '<unnamed>';
|
|
118
|
+
}
|
|
119
|
+
function formatResourceTargetForLog(resourceDef, target) {
|
|
120
|
+
const label = formatPolicyTargetForLog(target);
|
|
121
|
+
const identifiers = readResourceLogIdentifiers(resourceDef);
|
|
122
|
+
return identifiers.length > 0 ? `${label}; ${identifiers.join('; ')}` : label;
|
|
123
|
+
}
|
|
124
|
+
function readResourceLogIdentifiers(resourceDef) {
|
|
125
|
+
const identifiers = [];
|
|
126
|
+
if ('uri' in resourceDef && resourceDef.uri.length > 0) {
|
|
127
|
+
identifiers.push(`uri=${resourceDef.uri}`);
|
|
128
|
+
}
|
|
129
|
+
if ('uriTemplate' in resourceDef && resourceDef.uriTemplate.length > 0) {
|
|
130
|
+
identifiers.push(`uriTemplate=${resourceDef.uriTemplate}`);
|
|
131
|
+
}
|
|
132
|
+
return identifiers;
|
|
133
|
+
}
|
|
134
|
+
function readResourceName(resourceDef) {
|
|
135
|
+
return typeof resourceDef.name === 'string' ? resourceDef.name : '';
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|