callman-mcp 0.1.1 → 0.2.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/CHANGELOG.md +20 -0
- package/README.md +18 -4
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +7 -2
- package/dist/context.js.map +1 -1
- package/dist/resources/docs/overview.d.ts +1 -1
- package/dist/resources/docs/overview.d.ts.map +1 -1
- package/dist/resources/docs/overview.js +15 -2
- package/dist/resources/docs/overview.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +10 -13
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/catalog.d.ts.map +1 -1
- package/dist/tools/catalog.js +1 -0
- package/dist/tools/catalog.js.map +1 -1
- package/dist/tools/collections.d.ts.map +1 -1
- package/dist/tools/collections.js +27 -30
- package/dist/tools/collections.js.map +1 -1
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +35 -26
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/environments.d.ts.map +1 -1
- package/dist/tools/environments.js +32 -31
- package/dist/tools/environments.js.map +1 -1
- package/dist/tools/import.d.ts.map +1 -1
- package/dist/tools/import.js +9 -5
- package/dist/tools/import.js.map +1 -1
- package/dist/tools/lookups.d.ts +26 -1
- package/dist/tools/lookups.d.ts.map +1 -1
- package/dist/tools/lookups.js +95 -2
- package/dist/tools/lookups.js.map +1 -1
- package/dist/tools/meta.d.ts.map +1 -1
- package/dist/tools/meta.js +9 -4
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/requests.d.ts.map +1 -1
- package/dist/tools/requests.js +49 -29
- package/dist/tools/requests.js.map +1 -1
- package/dist/tools/run.d.ts.map +1 -1
- package/dist/tools/run.js +9 -6
- package/dist/tools/run.js.map +1 -1
- package/dist/tools/scenarios.d.ts.map +1 -1
- package/dist/tools/scenarios.js +8 -3
- package/dist/tools/scenarios.js.map +1 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/workspaces.d.ts.map +1 -1
- package/dist/tools/workspaces.js +18 -2
- package/dist/tools/workspaces.js.map +1 -1
- package/dist-cjs/context.js +7 -2
- package/dist-cjs/resources/docs/overview.js +15 -2
- package/dist-cjs/resources/index.js +9 -12
- package/dist-cjs/server.js +1 -1
- package/dist-cjs/tools/catalog.js +1 -0
- package/dist-cjs/tools/collections.js +26 -29
- package/dist-cjs/tools/contracts.js +34 -25
- package/dist-cjs/tools/environments.js +31 -30
- package/dist-cjs/tools/import.js +8 -4
- package/dist-cjs/tools/lookups.js +103 -3
- package/dist-cjs/tools/meta.js +9 -4
- package/dist-cjs/tools/requests.js +48 -28
- package/dist-cjs/tools/run.js +8 -5
- package/dist-cjs/tools/scenarios.js +8 -3
- package/dist-cjs/tools/shared.js +1 -1
- package/dist-cjs/tools/workspaces.js +18 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.0 — One connection, every workspace
|
|
4
|
+
|
|
5
|
+
A personal token already acted in every workspace, but the server behaved as if it were bound
|
|
6
|
+
to one: with `CALLMAN_WORKSPACE_ID` set, lists, searches and name lookups only ever looked
|
|
7
|
+
there; without it, users with several workspaces got `WORKSPACE_REQUIRED` on almost every call.
|
|
8
|
+
|
|
9
|
+
- Lists and searches (`list_collections`, `search_requests`, `list_environments`,
|
|
10
|
+
`list_connections`) cover all workspaces unless `workspace` narrows them (or `"all"`); every
|
|
11
|
+
row carries its workspace. `list_scenarios` rows show their workspace too.
|
|
12
|
+
- Collections, requests, environments, contract rules — any reference — are found in whichever
|
|
13
|
+
workspace holds them: the default first, then the others. A unique match anywhere is used and
|
|
14
|
+
the result says where; the same name in several workspaces returns candidates tagged with
|
|
15
|
+
their workspace. Ids work across workspaces.
|
|
16
|
+
- Writes follow the thing they touch: a request is created in its collection's workspace, a run
|
|
17
|
+
uses the request's workspace (and its environments), an import into a collection goes there.
|
|
18
|
+
- Creating something new still needs one target: `workspace`, the session default, or the only
|
|
19
|
+
workspace. New `use_workspace` sets or clears the default for the session.
|
|
20
|
+
- `whoami` explains the scope (`workspaceScope`); the overview doc, the server instructions and
|
|
21
|
+
the README describe it.
|
|
22
|
+
|
|
3
23
|
## 0.1.1 — Nothing silently ignored; the whole request, scenario and diagram surface
|
|
4
24
|
|
|
5
25
|
An agent using only this server (tool schemas, descriptions and `callman://` resources) now
|
package/README.md
CHANGED
|
@@ -82,19 +82,32 @@ Rebuild after changing the source; AI tools start a fresh process per session.
|
|
|
82
82
|
| `CALLMAN_API_URL` | `https://api.callman.io` | Server **origin**. On-prem: the address the desktop app uses (any path prefix is kept; a trailing `/api` is accepted). |
|
|
83
83
|
| `CALLMAN_TOKEN` | — | Personal token (`cm_pat_…`). Without it the server still starts; `whoami` explains how to set one. |
|
|
84
84
|
| `CALLMAN_TOKEN_FILE` | — | Read the token from a file instead (Docker/Kubernetes secrets). |
|
|
85
|
-
| `CALLMAN_WORKSPACE_ID` | — |
|
|
85
|
+
| `CALLMAN_WORKSPACE_ID` | — | Optional default workspace: where NEW things go when a tool is not told, and which workspace wins a name that exists in several. It never limits what the tool sees — every workspace stays reachable. Change it at runtime with `use_workspace`. |
|
|
86
86
|
| `CALLMAN_ALLOW_RUN` | `1` | `0` removes `run_request` / `run_collection` (no local execution). |
|
|
87
87
|
| `CALLMAN_LOG_LEVEL` | `warn` | `silent`, `error`, `warn`, `info`, `debug` — to **stderr** (stdout is the protocol). |
|
|
88
88
|
| `CALLMAN_TIMEOUT_MS` | `30000` | Per API call. |
|
|
89
89
|
| `CALLMAN_RUN_TIMEOUT_MS` | `600000` | Budget for one local run. |
|
|
90
90
|
| `CALLMAN_MAX_BODY_BYTES` | `16384` | Response-body preview cap in run output (max 262144). |
|
|
91
91
|
|
|
92
|
-
##
|
|
92
|
+
## Workspaces
|
|
93
|
+
|
|
94
|
+
One token, every workspace. The token acts as you in all workspaces you belong to, so a single
|
|
95
|
+
MCP entry covers them all — no per-workspace setup:
|
|
96
|
+
|
|
97
|
+
- **Lists and searches** (`list_collections`, `search_requests`, `list_environments`,
|
|
98
|
+
`list_connections`, `list_scenarios`) cover every workspace; each row says where it lives.
|
|
99
|
+
Pass `workspace` to narrow to one.
|
|
100
|
+
- **Names are found wherever they are.** The default workspace is searched first, then all the
|
|
101
|
+
others; a name that exists in several comes back as candidates tagged with their workspace.
|
|
102
|
+
- **Creating** goes to the workspace you name, the workspace of the collection you create into,
|
|
103
|
+
or the default. `use_workspace` sets the default for the session ("work in Payments now").
|
|
104
|
+
|
|
105
|
+
## Tools (58) and the permission each needs
|
|
93
106
|
|
|
94
107
|
| Area | Tools | Scope |
|
|
95
108
|
|---|---|---|
|
|
96
109
|
| Meta | `whoami` | — |
|
|
97
|
-
| Workspaces | `list_workspaces`, `list_workspace_members` | `workspaces:read` (always on) |
|
|
110
|
+
| Workspaces | `list_workspaces`, `use_workspace`, `list_workspace_members` | `workspaces:read` (always on) |
|
|
98
111
|
| | `add_workspace_member`, `update_workspace_member`, `remove_workspace_member` | `members:manage` (+ owner role) |
|
|
99
112
|
| Collections | `list_collections`, `get_collection_tree`, `export_collection` | `collections:read` |
|
|
100
113
|
| | `create_collection`, `update_collection`, `create_folder`, `update_folder` | `collections:write` |
|
|
@@ -183,7 +196,8 @@ enables AI tools in the admin panel (feature flag **AI tools (MCP)**).
|
|
|
183
196
|
| `403 PAT_ROUTE_FORBIDDEN` | That area is not available to AI tools. |
|
|
184
197
|
| `403 FEATURE_DISABLED` | An administrator switched AI tools off. |
|
|
185
198
|
| `403` on a write | You are a viewer in that workspace. |
|
|
186
|
-
| "pass `workspace`" |
|
|
199
|
+
| "pass `workspace`" | Creating something with several workspaces and no default — name one, or `use_workspace` for the session. Reading never needs it. |
|
|
200
|
+
| `REF_AMBIGUOUS` with workspaces | The same name exists in several workspaces — pass `workspace` or use the id. |
|
|
187
201
|
| Tool not listed in the client | Node 20+? Can `npx` reach the registry? Run `callman-mcp doctor`. |
|
|
188
202
|
| Changes not visible in the app | Switch back to the app (it refreshes on focus) or press Refresh in the diagram library. |
|
|
189
203
|
|
package/dist/context.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface ToolContext {
|
|
|
12
12
|
resolveWorkspace(explicit?: string | null): Promise<Workspace>;
|
|
13
13
|
resolveWorkspaceOrNull(explicit?: string | null): Promise<Workspace | null>;
|
|
14
14
|
listWorkspaces(): Promise<Workspace[]>;
|
|
15
|
+
getDefaultWorkspaceId(): string | null;
|
|
16
|
+
setDefaultWorkspaceId(id: string | null): void;
|
|
15
17
|
getTokenScopes(): Promise<string[]>;
|
|
16
18
|
withRunLock<T>(fn: () => Promise<T>): Promise<T>;
|
|
17
19
|
invalidate(prefix?: string): void;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,cAAc,CAAC;AAMzD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,cAAc,CAAC;AAMzD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,UAAU,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAOhB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAG/D,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5E,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAIvC,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAAC;IACvC,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAG/C,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAGpC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjD,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,eAAO,MAAM,iBAAiB,GAAI,SAAS,oBAAoB,KAAG,WA6FjE,CAAC"}
|
package/dist/context.js
CHANGED
|
@@ -17,10 +17,11 @@ export const createToolContext = (options) => {
|
|
|
17
17
|
const api = new CallmanApi(http);
|
|
18
18
|
const cache = new TtlCache(options.cacheTtlMs ?? 15_000);
|
|
19
19
|
let runLock = Promise.resolve();
|
|
20
|
+
let defaultWorkspaceId = options.config.defaultWorkspaceId ?? null;
|
|
20
21
|
const listWorkspaces = () => cache.getOrSet("workspaces", () => api.listWorkspaces());
|
|
21
22
|
const pickWorkspace = async (explicit, required) => {
|
|
22
23
|
const workspaces = await listWorkspaces();
|
|
23
|
-
const wanted = (explicit ?? "").trim() ||
|
|
24
|
+
const wanted = (explicit ?? "").trim() || defaultWorkspaceId || "";
|
|
24
25
|
if (wanted) {
|
|
25
26
|
const byId = workspaces.find((workspace) => workspace.id === wanted);
|
|
26
27
|
if (byId)
|
|
@@ -49,7 +50,7 @@ export const createToolContext = (options) => {
|
|
|
49
50
|
return null;
|
|
50
51
|
throw new ToolInputError(workspaces.length === 0 ? "WORKSPACE_NONE" : "WORKSPACE_REQUIRED", workspaces.length === 0
|
|
51
52
|
? "You are not a member of any workspace."
|
|
52
|
-
: "
|
|
53
|
+
: "This needs one target workspace and you have several — pass `workspace` (name or id), or pick a default for the session with use_workspace.", { candidates: summarize(workspaces) });
|
|
53
54
|
};
|
|
54
55
|
return {
|
|
55
56
|
config: options.config,
|
|
@@ -58,6 +59,10 @@ export const createToolContext = (options) => {
|
|
|
58
59
|
cache,
|
|
59
60
|
version: options.version,
|
|
60
61
|
listWorkspaces,
|
|
62
|
+
getDefaultWorkspaceId: () => defaultWorkspaceId,
|
|
63
|
+
setDefaultWorkspaceId: (id) => {
|
|
64
|
+
defaultWorkspaceId = id;
|
|
65
|
+
},
|
|
61
66
|
getTokenScopes: () => cache.getOrSet("token-scopes", async () => {
|
|
62
67
|
try {
|
|
63
68
|
return (await api.me()).token.scopes ?? [];
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAe,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const OVERVIEW_DOC = "# Working with Callman through MCP\n\nCallman is an API client and test platform (collections of HTTP requests, environments,\nmulti-step test scenarios, system-design diagrams). This server exposes it to you through\ntools; everything you do goes to the same server the Callman desktop app uses, as the user\nwhose token is configured, limited to that token's permissions and the user's workspace role.\n\n## Start here\n1. `whoami` \u2014 proves the connection and tells you the workspaces, features and which tools\n this token can use
|
|
1
|
+
export declare const OVERVIEW_DOC = "# Working with Callman through MCP\n\nCallman is an API client and test platform (collections of HTTP requests, environments,\nmulti-step test scenarios, system-design diagrams). This server exposes it to you through\ntools; everything you do goes to the same server the Callman desktop app uses, as the user\nwhose token is configured, limited to that token's permissions and the user's workspace role.\n\n## Start here\n1. `whoami` \u2014 proves the connection and tells you the workspaces, features and which tools\n this token can use.\n2. Look before you create: `list_collections` / `get_collection_tree` / `search_requests`.\n Creating a collection whose name exists is refused on purpose.\n3. Arguments are strict: a misspelled or unknown argument is an error that lists the valid\n ones \u2014 read it and retry; nothing is silently ignored.\n4. Names work as references everywhere an id does (collection, folder, request, environment,\n scenario, diagram, workspace). Ambiguous names come back as a candidate list \u2014 pick one.\n5. Preview big writes with `dryRun: true` (bulk create, imports, scenarios, diagrams).\n6. Deletions need `confirm: true` and an exact name or id. Ask the user unless they explicitly\n requested the deletion.\n\n## Workspaces\nThe token works in EVERY workspace the user belongs to (with their role in each):\n- Lists and searches (`list_collections`, `search_requests`, `list_environments`,\n `list_connections`, `list_scenarios`) cover all workspaces unless you pass `workspace`;\n every row says which workspace it is in.\n- A name (collection, request, environment) is looked up in the default workspace first, then\n in all others; a unique match anywhere is used and the result says where it was found. The\n same name in several workspaces comes back as candidates tagged with their workspace \u2014 pass\n `workspace` or the id.\n- Creating needs one target: `workspace`, or the collection it goes into, or the session\n default. `use_workspace` changes the default for the session (it never hides the others).\n- Environments, connections and global variables belong to one workspace: a request uses the\n ones of its own workspace.\n\n## Requests\n- Use `{{variable}}` for hosts and secrets (`{{baseUrl}}/users`) and put the values in an\n environment (`create_environment` / `set_environment_variables`). Use `:id` for path\n variables. See `callman://docs/request-schema`.\n- get_request returns a request in the same shape create/update take \u2014 read, change, send back.\n- Bodies: a JSON value, a raw string, or `{ mode: raw|formdata|urlencoded|json }`.\n- Database / Kafka / Redis steps and DB assertions are request fields; connections are\n referenced by id or name (`list_connections`).\n- Contract checks (field rules, data-driven rows) \u2014 `callman://docs/contracts`.\n- Scripts run in a sandbox with the `pm.*` API \u2014 `callman://docs/scripting/pm-api`.\n- `run_request` / `run_collection` execute on the user's machine with real variable values;\n you only get results and the names of variables scripts changed.\n\n## Secrets\nEnvironment values come back masked (`\u2022\u2022\u2022\u2022ab`) unless the token holds `environments:reveal`\nand you ask for `reveal: true`. Never write a masked environment value back \u2014 it is refused.\nRequest auth secrets and sensitive headers are masked the same way; sending a masked request\nsecret back UNCHANGED keeps the stored one, anything else masked is refused.\n\n## Scenarios\nMulti-step flows as a graph of typed nodes (request, condition, assertion, set-vars, poll,\ndb, kafka, script, wait, end \u2026). Read `callman://docs/scenario-nodes` before building one;\npartial node configs are merged over defaults. Runs happen on the server (`run_scenario`).\n\n## Diagrams\nSystem-design diagrams use a fixed component catalog \u2014 `callman://diagram/components`.\nBuild with `create_diagram` (auto layout), edit with `patch_diagram`, share with\n`share_diagram`. See `callman://docs/diagram-schema`.\n\n## After writing\nThe desktop app refreshes when the user switches back to it. Tell the user what you created\nand where (collection / folder names).\n";
|
|
2
2
|
//# sourceMappingURL=overview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,8mIAkExB,CAAC"}
|
|
@@ -7,8 +7,7 @@ whose token is configured, limited to that token's permissions and the user's wo
|
|
|
7
7
|
|
|
8
8
|
## Start here
|
|
9
9
|
1. \`whoami\` — proves the connection and tells you the workspaces, features and which tools
|
|
10
|
-
this token can use.
|
|
11
|
-
to workspace-scoped tools (or ask the user which one).
|
|
10
|
+
this token can use.
|
|
12
11
|
2. Look before you create: \`list_collections\` / \`get_collection_tree\` / \`search_requests\`.
|
|
13
12
|
Creating a collection whose name exists is refused on purpose.
|
|
14
13
|
3. Arguments are strict: a misspelled or unknown argument is an error that lists the valid
|
|
@@ -19,6 +18,20 @@ whose token is configured, limited to that token's permissions and the user's wo
|
|
|
19
18
|
6. Deletions need \`confirm: true\` and an exact name or id. Ask the user unless they explicitly
|
|
20
19
|
requested the deletion.
|
|
21
20
|
|
|
21
|
+
## Workspaces
|
|
22
|
+
The token works in EVERY workspace the user belongs to (with their role in each):
|
|
23
|
+
- Lists and searches (\`list_collections\`, \`search_requests\`, \`list_environments\`,
|
|
24
|
+
\`list_connections\`, \`list_scenarios\`) cover all workspaces unless you pass \`workspace\`;
|
|
25
|
+
every row says which workspace it is in.
|
|
26
|
+
- A name (collection, request, environment) is looked up in the default workspace first, then
|
|
27
|
+
in all others; a unique match anywhere is used and the result says where it was found. The
|
|
28
|
+
same name in several workspaces comes back as candidates tagged with their workspace — pass
|
|
29
|
+
\`workspace\` or the id.
|
|
30
|
+
- Creating needs one target: \`workspace\`, or the collection it goes into, or the session
|
|
31
|
+
default. \`use_workspace\` changes the default for the session (it never hides the others).
|
|
32
|
+
- Environments, connections and global variables belong to one workspace: a request uses the
|
|
33
|
+
ones of its own workspace.
|
|
34
|
+
|
|
22
35
|
## Requests
|
|
23
36
|
- Use \`{{variable}}\` for hosts and secrets (\`{{baseUrl}}/users\`) and put the values in an
|
|
24
37
|
environment (\`create_environment\` / \`set_environment_variables\`). Use \`:id\` for path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/resources/docs/overview.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkE3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAa3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkCjD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAa3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAkCjD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA2IvE,CAAC"}
|
package/dist/resources/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { diagramGraphView } from "../domain/diagram/summarize.js";
|
|
|
4
4
|
import { compactRequestView, requestSummaryView } from "../domain/requestShape.js";
|
|
5
5
|
import { scenarioFullView } from "../domain/scenario/summarize.js";
|
|
6
6
|
import { safeStringify } from "../lib/truncate.js";
|
|
7
|
-
import {
|
|
7
|
+
import { findCollection, findEnvironment, findRequest, loadTree, resolveDiagram, resolveScenario, workspaceTag } from "../tools/lookups.js";
|
|
8
8
|
import { CONTRACTS_DOC } from "./docs/contracts.js";
|
|
9
9
|
import { DIAGRAM_SCHEMA_DOC } from "./docs/diagramSchema.js";
|
|
10
10
|
import { OVERVIEW_DOC } from "./docs/overview.js";
|
|
@@ -83,22 +83,19 @@ export const registerResources = (server, ctx) => {
|
|
|
83
83
|
const { items } = await ctx.api.listEnvironments(ws.id);
|
|
84
84
|
return json(uri, { workspace: { id: ws.id, name: ws.name }, environments: items.map((environment) => ({ id: environment.id, name: environment.name, variableKeys: environment.variables.map((entry) => entry.key) })) });
|
|
85
85
|
});
|
|
86
|
-
server.registerResource("collection-tree", new ResourceTemplate("callman://collection/{collection}/tree", { list: undefined }), { title: "A collection's folders and requests", description: "Folders and requests of a collection (id or name) in
|
|
87
|
-
const ws = await ctx.
|
|
88
|
-
const resolved = await resolveCollection(ctx, ws.id, variable(variables.collection));
|
|
86
|
+
server.registerResource("collection-tree", new ResourceTemplate("callman://collection/{collection}/tree", { list: undefined }), { title: "A collection's folders and requests", description: "Folders and requests of a collection (id or name) in any of your workspaces.", mimeType: "application/json" }, async (uri, variables) => {
|
|
87
|
+
const { ws, value: resolved } = await findCollection(ctx, null, variable(variables.collection));
|
|
89
88
|
const tree = await loadTree(ctx, ws.id, resolved.item.id);
|
|
90
|
-
return json(uri, { collection: { id: resolved.item.id, name: resolved.item.name }, folders: tree.folders, requests: tree.requests.map(requestSummaryView) });
|
|
89
|
+
return json(uri, { collection: { id: resolved.item.id, name: resolved.item.name }, workspace: workspaceTag(ws), folders: tree.folders, requests: tree.requests.map(requestSummaryView) });
|
|
91
90
|
});
|
|
92
|
-
server.registerResource("request", new ResourceTemplate("callman://request/{request}", { list: undefined }), { title: "A saved request", description: "One request (id or unique name) in
|
|
93
|
-
const ws = await ctx.
|
|
94
|
-
|
|
95
|
-
return json(uri, { request: compactRequestView(request, { full: true }) });
|
|
91
|
+
server.registerResource("request", new ResourceTemplate("callman://request/{request}", { list: undefined }), { title: "A saved request", description: "One request (id or unique name) in any of your workspaces, secrets masked.", mimeType: "application/json" }, async (uri, variables) => {
|
|
92
|
+
const { ws, value } = await findRequest(ctx, null, variable(variables.request));
|
|
93
|
+
return json(uri, { request: compactRequestView(value.request, { full: true }), workspace: workspaceTag(ws) });
|
|
96
94
|
});
|
|
97
|
-
server.registerResource("environment", new ResourceTemplate("callman://environment/{environment}", { list: undefined }), { title: "An environment", description: "One environment (id or name) in
|
|
98
|
-
const ws = await ctx.
|
|
99
|
-
const resolved = await resolveEnvironment(ctx, ws.id, variable(variables.environment));
|
|
95
|
+
server.registerResource("environment", new ResourceTemplate("callman://environment/{environment}", { list: undefined }), { title: "An environment", description: "One environment (id or name) in any of your workspaces, values masked by the server.", mimeType: "application/json" }, async (uri, variables) => {
|
|
96
|
+
const { ws, value: resolved } = await findEnvironment(ctx, null, variable(variables.environment));
|
|
100
97
|
const fresh = await ctx.api.getEnvironment(ws.id, resolved.item.id);
|
|
101
|
-
return json(uri, { environment: { id: fresh.id, name: fresh.name, variables: fresh.variables } });
|
|
98
|
+
return json(uri, { environment: { id: fresh.id, name: fresh.name, variables: fresh.variables }, workspace: workspaceTag(ws) });
|
|
102
99
|
});
|
|
103
100
|
server.registerResource("scenario", new ResourceTemplate("callman://scenario/{scenario}", { list: undefined }), { title: "A scenario", description: "One scenario (id or name): nodes with configs (clipped, secrets masked) and edges.", mimeType: "application/json" }, async (uri, variables) => {
|
|
104
101
|
const ws = await ctx.resolveWorkspaceOrNull();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3F,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -18,6 +18,6 @@ export interface CallmanMcpInstance {
|
|
|
18
18
|
context: ToolContext;
|
|
19
19
|
}
|
|
20
20
|
export declare const SERVER_NAME = "callman";
|
|
21
|
-
export declare const SERVER_INSTRUCTIONS = "Callman is an API client and test platform: collections of HTTP requests, environments with variables, multi-step test scenarios, and system-design diagrams. You act as the user whose token is configured, within that token's permissions and the user's workspace role.\nStart with whoami. Names work as references (collection, folder, request, environment, scenario, diagram, workspace); ambiguous names return candidates. List before creating \u2014 duplicate collection names are refused. Preview large writes with dryRun: true; deletions need confirm: true and the user's agreement. Environment values are masked unless the token holds environments:reveal and you pass reveal: true; never write a masked value back. Arguments are strict \u2014 an unknown key is an error listing the valid ones. Read callman://docs/overview for the conventions, callman://docs/request-schema before creating or editing requests, callman://docs/contracts before contract checks, callman://docs/scenario-nodes before scenarios, and callman://docs/diagram-schema + callman://diagram/components before diagrams.";
|
|
21
|
+
export declare const SERVER_INSTRUCTIONS = "Callman is an API client and test platform: collections of HTTP requests, environments with variables, multi-step test scenarios, and system-design diagrams. You act as the user whose token is configured, within that token's permissions and the user's workspace role.\nStart with whoami. The token works in every workspace the user belongs to: lists and searches cover all of them unless you pass `workspace`, names are looked up in the default workspace first and then everywhere, and results say which workspace they come from; creating something needs a target (`workspace`, the collection it goes into, or the session default \u2014 use_workspace). Names work as references (collection, folder, request, environment, scenario, diagram, workspace); ambiguous names return candidates. List before creating \u2014 duplicate collection names are refused. Preview large writes with dryRun: true; deletions need confirm: true and the user's agreement. Environment values are masked unless the token holds environments:reveal and you pass reveal: true; never write a masked value back. Arguments are strict \u2014 an unknown key is an error listing the valid ones. Read callman://docs/overview for the conventions, callman://docs/request-schema before creating or editing requests, callman://docs/contracts before contract checks, callman://docs/scenario-nodes before scenarios, and callman://docs/diagram-schema + callman://diagram/components before diagrams.";
|
|
22
22
|
export declare const createCallmanMcpServer: (options: CreateServerOptions) => CallmanMcpInstance;
|
|
23
23
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAU3C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,eAAO,MAAM,mBAAmB,s7CAC0nC,CAAC;AAE3pC,eAAO,MAAM,sBAAsB,GAAI,SAAS,mBAAmB,KAAG,kBAkBrE,CAAC"}
|
package/dist/server.js
CHANGED
|
@@ -5,7 +5,7 @@ import { registerResources } from "./resources/index.js";
|
|
|
5
5
|
import { registerAllTools } from "./tools/index.js";
|
|
6
6
|
export const SERVER_NAME = "callman";
|
|
7
7
|
export const SERVER_INSTRUCTIONS = `Callman is an API client and test platform: collections of HTTP requests, environments with variables, multi-step test scenarios, and system-design diagrams. You act as the user whose token is configured, within that token's permissions and the user's workspace role.
|
|
8
|
-
Start with whoami. Names work as references (collection, folder, request, environment, scenario, diagram, workspace); ambiguous names return candidates. List before creating — duplicate collection names are refused. Preview large writes with dryRun: true; deletions need confirm: true and the user's agreement. Environment values are masked unless the token holds environments:reveal and you pass reveal: true; never write a masked value back. Arguments are strict — an unknown key is an error listing the valid ones. Read callman://docs/overview for the conventions, callman://docs/request-schema before creating or editing requests, callman://docs/contracts before contract checks, callman://docs/scenario-nodes before scenarios, and callman://docs/diagram-schema + callman://diagram/components before diagrams.`;
|
|
8
|
+
Start with whoami. The token works in every workspace the user belongs to: lists and searches cover all of them unless you pass \`workspace\`, names are looked up in the default workspace first and then everywhere, and results say which workspace they come from; creating something needs a target (\`workspace\`, the collection it goes into, or the session default — use_workspace). Names work as references (collection, folder, request, environment, scenario, diagram, workspace); ambiguous names return candidates. List before creating — duplicate collection names are refused. Preview large writes with dryRun: true; deletions need confirm: true and the user's agreement. Environment values are masked unless the token holds environments:reveal and you pass reveal: true; never write a masked value back. Arguments are strict — an unknown key is an error listing the valid ones. Read callman://docs/overview for the conventions, callman://docs/request-schema before creating or editing requests, callman://docs/contracts before contract checks, callman://docs/scenario-nodes before scenarios, and callman://docs/diagram-schema + callman://diagram/components before diagrams.`;
|
|
9
9
|
export const createCallmanMcpServer = (options) => {
|
|
10
10
|
const version = options.version ?? "0.0.0";
|
|
11
11
|
const context = createToolContext({
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAsBpD,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAG;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAsBpD,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,MAAM,CAAC,MAAM,mBAAmB,GAAG;0pCACunC,CAAC;AAE3pC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAA4B,EAAsB,EAAE;IACzF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAG,iBAAiB,CAAC;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;QACP,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAChD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAC/F,CAAC;IACF,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;AAExK,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IAEjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,GAAG,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;AAExK,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IAEjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,EAAE,gBAAgB,EA4E1C,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,EAAE,EAAE,eAAe,OAAO,KAAG,gBAAgB,EAUhG,CAAC"}
|
package/dist/tools/catalog.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
export const TOOL_CATALOG = [
|
|
6
6
|
{ name: "whoami", group: "meta", scopes: [] },
|
|
7
7
|
{ name: "list_workspaces", group: "workspaces", scopes: ["workspaces:read"] },
|
|
8
|
+
{ name: "use_workspace", group: "workspaces", scopes: ["workspaces:read"] },
|
|
8
9
|
{ name: "list_workspace_members", group: "workspaces", scopes: ["workspaces:read"] },
|
|
9
10
|
{ name: "add_workspace_member", group: "workspaces", scopes: ["members:manage"] },
|
|
10
11
|
{ name: "update_workspace_member", group: "workspaces", scopes: ["members:manage"] },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAqBjD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/tools/collections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAqBjD,eAAO,MAAM,uBAAuB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA+O7E,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { requestSummaryView } from "../domain/requestShape.js";
|
|
|
5
5
|
import { resolvedSummary } from "../domain/resolve.js";
|
|
6
6
|
import { sliceWithCursor } from "../lib/pagination.js";
|
|
7
7
|
import { byteLength, LIMITS } from "../lib/truncate.js";
|
|
8
|
-
import { loadCollections, loadTree, resolveCollection, resolveFolder, sameName } from "./lookups.js";
|
|
8
|
+
import { findCollection, loadCollections, loadTree, resolveCollection, resolveFolder, sameName, workspacesForListing, workspaceTag } from "./lookups.js";
|
|
9
9
|
import { confirmArg, cursorArgs, DESTRUCTIVE, guarded, IDEMPOTENT_WRITE, ok, READ, refArg, requireConfirm, workspaceArg, WRITE } from "./shared.js";
|
|
10
10
|
const EXPORT_MAX_BYTES = 1024 * 1024;
|
|
11
11
|
const runnerSettingsArg = strictObject({
|
|
@@ -17,20 +17,22 @@ const runnerSettingsArg = strictObject({
|
|
|
17
17
|
export const registerCollectionTools = (server, ctx) => {
|
|
18
18
|
server.registerTool("list_collections", {
|
|
19
19
|
title: "List collections",
|
|
20
|
-
description: "List
|
|
20
|
+
description: "List collections with request/folder counts — across ALL your workspaces unless `workspace` narrows it (the default workspace comes first; every row says its workspace). Optional `query` filters by name (substring). Use get_collection_tree to see what is inside one.",
|
|
21
21
|
inputSchema: { workspace: workspaceArg, query: z.string().max(200).optional(), ...cursorArgs },
|
|
22
22
|
annotations: READ,
|
|
23
23
|
}, guarded(async ({ workspace, query, cursor, limit }) => {
|
|
24
|
-
const
|
|
25
|
-
const all = await loadCollections(ctx, ws.id);
|
|
24
|
+
const workspaces = await workspacesForListing(ctx, workspace);
|
|
26
25
|
const needle = query?.trim().toLowerCase();
|
|
27
|
-
const
|
|
28
|
-
|
|
26
|
+
const rows = (await Promise.all(workspaces.map(async (ws) => (await loadCollections(ctx, ws.id)).map((collection) => ({ ws, collection })))))
|
|
27
|
+
.flat()
|
|
28
|
+
.filter(({ collection }) => !needle || collection.name.toLowerCase().includes(needle));
|
|
29
|
+
const page = sliceWithCursor(rows, cursor, limit, `${workspaces.map((ws) => ws.id).join(",")}|${needle ?? ""}`);
|
|
29
30
|
return ok({
|
|
30
|
-
workspace:
|
|
31
|
-
collections: page.items.map((collection) => ({
|
|
31
|
+
...(workspaces.length === 1 ? { workspace: workspaceTag(workspaces[0]) } : { workspaces: workspaces.map(workspaceTag) }),
|
|
32
|
+
collections: page.items.map(({ ws, collection }) => ({
|
|
32
33
|
id: collection.id,
|
|
33
34
|
name: collection.name,
|
|
35
|
+
...(workspaces.length > 1 ? { workspace: workspaceTag(ws) } : {}),
|
|
34
36
|
requestCount: collection.requestCount ?? null,
|
|
35
37
|
folderCount: collection.folderCount ?? null,
|
|
36
38
|
updatedAt: collection.updatedAt ?? null,
|
|
@@ -41,17 +43,17 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
41
43
|
}));
|
|
42
44
|
server.registerTool("get_collection_tree", {
|
|
43
45
|
title: "Get a collection's folders and requests",
|
|
44
|
-
description: "The folders (with paths like \"Auth/Login\") and requests (id, name, method, url, folder) of one collection — the map you need before creating, moving or running requests.",
|
|
46
|
+
description: "The folders (with paths like \"Auth/Login\") and requests (id, name, method, url, folder) of one collection, in whichever workspace it lives — the map you need before creating, moving or running requests.",
|
|
45
47
|
inputSchema: { workspace: workspaceArg, collection: refArg("Collection") },
|
|
46
48
|
annotations: READ,
|
|
47
49
|
}, guarded(async ({ workspace, collection }) => {
|
|
48
|
-
const ws = await ctx
|
|
49
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
50
|
+
const { ws, value: resolved, note } = await findCollection(ctx, workspace, collection);
|
|
50
51
|
const tree = await loadTree(ctx, ws.id, resolved.item.id);
|
|
51
52
|
const truncated = tree.requests.length > LIMITS.TREE_ITEMS;
|
|
52
53
|
return ok({
|
|
53
54
|
collection: { id: resolved.item.id, name: resolved.item.name },
|
|
54
|
-
|
|
55
|
+
workspace: workspaceTag(ws),
|
|
56
|
+
resolved: [resolvedSummary(collection, resolved), ...(note ? [{ input: collection, note }] : [])],
|
|
55
57
|
folders: tree.folders.map((folder) => ({ id: folder.id, name: folder.name, parentId: folder.parentId, path: folder.path })),
|
|
56
58
|
requests: tree.requests.slice(0, LIMITS.TREE_ITEMS).map(requestSummaryView),
|
|
57
59
|
...(truncated ? { truncated: true, totalRequests: tree.requests.length } : {}),
|
|
@@ -63,18 +65,17 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
63
65
|
inputSchema: { workspace: workspaceArg, collection: refArg("Collection"), format: z.enum(["internal", "postman"]).default("internal") },
|
|
64
66
|
annotations: READ,
|
|
65
67
|
}, guarded(async ({ workspace, collection, format }) => {
|
|
66
|
-
const ws = await ctx
|
|
67
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
68
|
+
const { ws, value: resolved } = await findCollection(ctx, workspace, collection);
|
|
68
69
|
const document = await ctx.api.exportCollection(ws.id, resolved.item.id, format);
|
|
69
70
|
const bytes = byteLength(document);
|
|
70
71
|
if (bytes > EXPORT_MAX_BYTES) {
|
|
71
72
|
throw new ToolInputError("EXPORT_TOO_LARGE", `The export is ${bytes} bytes (limit ${EXPORT_MAX_BYTES}). Export it from the desktop app instead.`, { bytes });
|
|
72
73
|
}
|
|
73
|
-
return ok({ collection: { id: resolved.item.id, name: resolved.item.name }, format, bytes, document: document });
|
|
74
|
+
return ok({ collection: { id: resolved.item.id, name: resolved.item.name }, workspace: workspaceTag(ws), format, bytes, document: document });
|
|
74
75
|
}));
|
|
75
76
|
server.registerTool("create_collection", {
|
|
76
77
|
title: "Create a collection",
|
|
77
|
-
description: "Create an empty collection. Refuses a name that already exists in
|
|
78
|
+
description: "Create an empty collection in `workspace` (or the session default — use_workspace; with one workspace, that one). Refuses a name that already exists in that workspace unless allowDuplicateName is true — list_collections first and reuse an existing one when it fits.",
|
|
78
79
|
inputSchema: {
|
|
79
80
|
workspace: workspaceArg,
|
|
80
81
|
name: z.string().min(1).max(LIMITS.NAME),
|
|
@@ -92,7 +93,7 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
92
93
|
}
|
|
93
94
|
const created = await ctx.api.createCollection(ws.id, { name: name.trim(), ...(runnerSettings ? { runnerSettings: compactSettings(runnerSettings) } : {}) });
|
|
94
95
|
ctx.invalidate(`collections:${ws.id}`);
|
|
95
|
-
return ok({ collection: { id: created.id, name: created.name }, note: "Created. Add requests with create_request / create_requests_bulk / import_content." });
|
|
96
|
+
return ok({ collection: { id: created.id, name: created.name }, workspace: workspaceTag(ws), note: "Created. Add requests with create_request / create_requests_bulk / import_content." });
|
|
96
97
|
}));
|
|
97
98
|
server.registerTool("update_collection", {
|
|
98
99
|
title: "Rename a collection / change runner settings",
|
|
@@ -107,14 +108,13 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
107
108
|
}, guarded(async ({ workspace, collection, name, runnerSettings }) => {
|
|
108
109
|
if (name === undefined && runnerSettings === undefined)
|
|
109
110
|
throw new ToolInputError("NOTHING_TO_UPDATE", "Pass name and/or runnerSettings.");
|
|
110
|
-
const ws = await ctx
|
|
111
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
111
|
+
const { ws, value: resolved, note } = await findCollection(ctx, workspace, collection);
|
|
112
112
|
const updated = await ctx.api.updateCollection(ws.id, resolved.item.id, {
|
|
113
113
|
...(name !== undefined ? { name: name.trim() } : {}),
|
|
114
114
|
...(runnerSettings ? { runnerSettings: compactSettings(runnerSettings) } : {}),
|
|
115
115
|
});
|
|
116
116
|
ctx.invalidate(`collections:${ws.id}`);
|
|
117
|
-
return ok({ collection: { id: updated.id, name: updated.name, runnerSettings: updated.runnerSettings ?? null }, resolved: [resolvedSummary(collection, resolved)] });
|
|
117
|
+
return ok({ collection: { id: updated.id, name: updated.name, runnerSettings: updated.runnerSettings ?? null }, workspace: workspaceTag(ws), resolved: [resolvedSummary(collection, resolved), ...(note ? [{ input: collection, note }] : [])] });
|
|
118
118
|
}));
|
|
119
119
|
server.registerTool("create_folder", {
|
|
120
120
|
title: "Create a folder",
|
|
@@ -127,8 +127,7 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
127
127
|
},
|
|
128
128
|
annotations: WRITE,
|
|
129
129
|
}, guarded(async ({ workspace, collection, name, parent }) => {
|
|
130
|
-
const ws = await ctx
|
|
131
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
130
|
+
const { ws, value: resolved } = await findCollection(ctx, workspace, collection);
|
|
132
131
|
const parentFolder = await resolveFolder(ctx, ws.id, resolved.item.id, parent);
|
|
133
132
|
const tree = await loadTree(ctx, ws.id, resolved.item.id);
|
|
134
133
|
const sibling = tree.folders.find((folder) => folder.parentId === (parentFolder?.item.id ?? null) && sameName(folder.name, name));
|
|
@@ -140,6 +139,7 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
140
139
|
ctx.invalidate(`collections:${ws.id}`);
|
|
141
140
|
return ok({
|
|
142
141
|
folder: { id: folder.id, name: folder.name, parentId: folder.parentId, path: parentFolder ? `${parentFolder.item.path}/${folder.name}` : folder.name },
|
|
142
|
+
workspace: workspaceTag(ws),
|
|
143
143
|
resolved: [resolvedSummary(collection, resolved), ...(parentFolder ? [resolvedSummary(parent, parentFolder)] : [])],
|
|
144
144
|
});
|
|
145
145
|
}));
|
|
@@ -158,8 +158,7 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
158
158
|
}, guarded(async ({ workspace, collection, folder, name, parent, targetCollection }) => {
|
|
159
159
|
if (name === undefined && parent === undefined && targetCollection === undefined)
|
|
160
160
|
throw new ToolInputError("NOTHING_TO_UPDATE", "Pass name, parent and/or targetCollection.");
|
|
161
|
-
const ws = await ctx
|
|
162
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
161
|
+
const { ws, value: resolved } = await findCollection(ctx, workspace, collection);
|
|
163
162
|
const target = await resolveFolder(ctx, ws.id, resolved.item.id, folder);
|
|
164
163
|
if (!target)
|
|
165
164
|
throw new ToolInputError("REF_REQUIRED", "folder is required.");
|
|
@@ -187,12 +186,11 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
187
186
|
annotations: DESTRUCTIVE,
|
|
188
187
|
}, guarded(async ({ workspace, collection, confirm }) => {
|
|
189
188
|
requireConfirm(confirm, "a collection");
|
|
190
|
-
const ws = await ctx
|
|
191
|
-
const resolved = await resolveCollection(ctx, ws.id, collection, { exact: true });
|
|
189
|
+
const { ws, value: resolved } = await findCollection(ctx, workspace, collection, { exact: true });
|
|
192
190
|
await ctx.api.deleteCollection(ws.id, resolved.item.id);
|
|
193
191
|
ctx.invalidate(`collections:${ws.id}`);
|
|
194
192
|
ctx.invalidate(`tree:${ws.id}:${resolved.item.id}`);
|
|
195
|
-
return ok({ deleted: { id: resolved.item.id, name: resolved.item.name }, resolved: [resolvedSummary(collection, resolved)] });
|
|
193
|
+
return ok({ deleted: { id: resolved.item.id, name: resolved.item.name }, workspace: workspaceTag(ws), resolved: [resolvedSummary(collection, resolved)] });
|
|
196
194
|
}));
|
|
197
195
|
server.registerTool("delete_folder", {
|
|
198
196
|
title: "Delete a folder",
|
|
@@ -201,15 +199,14 @@ export const registerCollectionTools = (server, ctx) => {
|
|
|
201
199
|
annotations: DESTRUCTIVE,
|
|
202
200
|
}, guarded(async ({ workspace, collection, folder, confirm }) => {
|
|
203
201
|
requireConfirm(confirm, "a folder");
|
|
204
|
-
const ws = await ctx
|
|
205
|
-
const resolved = await resolveCollection(ctx, ws.id, collection);
|
|
202
|
+
const { ws, value: resolved } = await findCollection(ctx, workspace, collection);
|
|
206
203
|
const target = await resolveFolder(ctx, ws.id, resolved.item.id, folder, { exact: true });
|
|
207
204
|
if (!target)
|
|
208
205
|
throw new ToolInputError("REF_REQUIRED", "folder is required.");
|
|
209
206
|
await ctx.api.deleteFolder(ws.id, target.item.id);
|
|
210
207
|
ctx.invalidate(`tree:${ws.id}:${resolved.item.id}`);
|
|
211
208
|
ctx.invalidate(`collections:${ws.id}`);
|
|
212
|
-
return ok({ deleted: { id: target.item.id, name: target.item.name, path: target.item.path }, resolved: [resolvedSummary(collection, resolved), resolvedSummary(folder, target)] });
|
|
209
|
+
return ok({ deleted: { id: target.item.id, name: target.item.name, path: target.item.path }, workspace: workspaceTag(ws), resolved: [resolvedSummary(collection, resolved), resolvedSummary(folder, target)] });
|
|
213
210
|
}));
|
|
214
211
|
};
|
|
215
212
|
const compactSettings = (settings) => Object.fromEntries(Object.entries(settings).filter(([, value]) => typeof value === "boolean"));
|