tapimo 0.5.2 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/apps/verified-tokens.d.ts +117 -117
- package/dist/apps/data/routes/addresses.d.ts +206 -206
- package/dist/apps/data/routes/rpc.d.ts +31 -31
- package/dist/apps/management/routes/invite-links.d.ts +174 -174
- package/dist/apps/management/routes/projects.d.ts +124 -124
- package/dist/apps/mcp.d.ts +9 -2
- package/dist/apps/mcp.d.ts.map +1 -1
- package/dist/apps/mcp.js +9 -4
- package/dist/apps/mcp.js.map +1 -1
- package/dist/cli/Cli.d.ts.map +1 -1
- package/dist/cli/Cli.js +7 -2
- package/dist/cli/Cli.js.map +1 -1
- package/package.json +2 -2
- package/src/apps/mcp.test.ts +13 -0
- package/src/apps/mcp.ts +18 -5
- package/src/cli/Cli.test.ts +36 -0
- package/src/cli/Cli.ts +7 -2
package/dist/apps/mcp.d.ts
CHANGED
|
@@ -29,8 +29,13 @@ export declare namespace schema {
|
|
|
29
29
|
* the other route groups:
|
|
30
30
|
*
|
|
31
31
|
* ```ts
|
|
32
|
-
* App.create(options)
|
|
32
|
+
* const app = App.create(options)
|
|
33
|
+
* const fetch = app.fetch.bind(app)
|
|
34
|
+
* app.route('/', mcp({ fetch }))
|
|
33
35
|
* ```
|
|
36
|
+
*
|
|
37
|
+
* Capture `fetch` before adding request-level wrappers, so nested calls stay
|
|
38
|
+
* within the outer request's instrumentation lifecycle.
|
|
34
39
|
*/
|
|
35
40
|
export declare function mcp(options: mcp.Options): import("hono/hono-base").HonoBase<App.Environment, {
|
|
36
41
|
"/mcp": {
|
|
@@ -58,8 +63,10 @@ export declare namespace mcp {
|
|
|
58
63
|
docs?: Source | false | undefined;
|
|
59
64
|
/** In-process fetch handler for the composed app (e.g. `(request) => app.fetch(request)`). */
|
|
60
65
|
fetch: (request: Request) => Response | Promise<Response>;
|
|
61
|
-
/** MCP server name. @default '
|
|
66
|
+
/** MCP server name. @default 'tempo' */
|
|
62
67
|
name?: string | undefined;
|
|
68
|
+
/** Human-readable MCP server title. @default 'Tempo MCP' */
|
|
69
|
+
title?: string | undefined;
|
|
63
70
|
/** MCP server version. @default '0.0.0' */
|
|
64
71
|
version?: string | undefined;
|
|
65
72
|
};
|
package/dist/apps/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAerC,mEAAmE;AACnE,yBAAiB,MAAM,CAAC;IACtB,mCAAmC;IAC5B,MAAM,EAAE,4FAEiF,CAAA;IAEhG,8BAA8B;IACvB,MAAM,KAAK;;;;qBAU0D,CAAA;IAE5E,qCAAqC;IAC9B,MAAM,QAAQ;;;;;;;;;qBAaoD,CAAA;CAC1E;AAED
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAerC,mEAAmE;AACnE,yBAAiB,MAAM,CAAC;IACtB,mCAAmC;IAC5B,MAAM,EAAE,4FAEiF,CAAA;IAEhG,8BAA8B;IACvB,MAAM,KAAK;;;;qBAU0D,CAAA;IAE5E,qCAAqC;IAC9B,MAAM,QAAQ;;;;;;;;;qBAaoD,CAAA;CAC1E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO;;;;;;;;;;;;;;;;;;gBAgIvC;AA8ED,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,uCAAuC;IACvC,KAAK,OAAO,GAAG;QACb,2HAA2H;QAC3H,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;QACjC,8FAA8F;QAC9F,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QACzD,wCAAwC;QACxC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,4DAA4D;QAC5D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,2CAA2C;QAC3C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;IAED,oDAAoD;IACpD,KAAK,MAAM,GACP,MAAM,GACN,GAAG,GACH;QACE,2EAA2E;QAC3E,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAA;QACxE,6CAA6C;QAC7C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;QAC5C,wCAAwC;QACxC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAClB,CAAA;CACN"}
|
package/dist/apps/mcp.js
CHANGED
|
@@ -9,7 +9,7 @@ const tagGroup = 'Data API';
|
|
|
9
9
|
/** Tags inside the group hidden from MCP: partner-shaped CoinGecko mirrors and the MCP endpoint itself. */
|
|
10
10
|
const excludedTags = ['CoinGecko', 'MCP'];
|
|
11
11
|
/** Usage guidance surfaced to MCP clients on initialize. */
|
|
12
|
-
const instructions = "
|
|
12
|
+
const instructions = "Tempo MCP provides access to the Tempo API's data domain and documentation. Authenticated tools accept a Tempo API key sent as an `Authorization: Bearer` header on the HTTP request. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.";
|
|
13
13
|
/** Zod schemas owned by the MCP endpoint's OpenAPI description. */
|
|
14
14
|
export var schema;
|
|
15
15
|
(function (schema) {
|
|
@@ -50,11 +50,16 @@ export var schema;
|
|
|
50
50
|
* the other route groups:
|
|
51
51
|
*
|
|
52
52
|
* ```ts
|
|
53
|
-
* App.create(options)
|
|
53
|
+
* const app = App.create(options)
|
|
54
|
+
* const fetch = app.fetch.bind(app)
|
|
55
|
+
* app.route('/', mcp({ fetch }))
|
|
54
56
|
* ```
|
|
57
|
+
*
|
|
58
|
+
* Capture `fetch` before adding request-level wrappers, so nested calls stay
|
|
59
|
+
* within the outer request's instrumentation lifecycle.
|
|
55
60
|
*/
|
|
56
61
|
export function mcp(options) {
|
|
57
|
-
const { docs = 'https://mcp.tempo.xyz/mcp', fetch, name = '
|
|
62
|
+
const { docs = 'https://mcp.tempo.xyz/mcp', fetch, name = 'tempo', title = 'Tempo MCP', version = '0.0.0', } = options;
|
|
58
63
|
// One incur instance per caller origin: the OpenAPI document is parsed once,
|
|
59
64
|
// and generated commands rebase onto the origin so tool results embed real
|
|
60
65
|
// absolute URLs (e.g. token asset URIs).
|
|
@@ -82,7 +87,7 @@ export function mcp(options) {
|
|
|
82
87
|
const url = new URL(request.url);
|
|
83
88
|
return fetch(new Request(new URL(url.pathname + url.search, origin), request));
|
|
84
89
|
},
|
|
85
|
-
mcp: { instructions },
|
|
90
|
+
mcp: { instructions, title },
|
|
86
91
|
openapi: scope(document),
|
|
87
92
|
// `compact` + `security: false` keep tool schemas lean: no examples,
|
|
88
93
|
// oversized regexes, or per-tool credential inputs (auth rides the
|
package/dist/apps/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,IAAI,EAAE,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,GAAG,IAAI,SAAS,EAAgB,MAAM,OAAO,CAAA;AACtD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAG7B,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC,kFAAkF;AAClF,MAAM,QAAQ,GAAG,UAAU,CAAA;AAE3B,2GAA2G;AAC3G,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAEzC,4DAA4D;AAC5D,MAAM,YAAY,GAChB,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/apps/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/Cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAUzC;;;GAGG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,IAAI,CAAC,OAAY;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAUzC;;;GAGG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,IAAI,CAAC,OAAY;;;;;;;;;;;;oCA4BjE;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,OAAO,GAAG;QACb,uBAAuB;QACvB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,8HAA8H;QAC9H,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAA;QACrC,gBAAgB;QAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,wEAAwE;QACxE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,SAAS,CAAA;QAC3C,4EAA4E;QAC5E,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;QAC1C,4CAA4C;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAA;QAC/C,mBAAmB;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
|
package/dist/cli/Cli.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as Admin from './commands/admin.js';
|
|
|
3
3
|
/** Tool patterns hidden from MCP clients: super admin, partner-shaped gecko mirrors, browser session flows. */
|
|
4
4
|
const excludedTools = ['admin_*', 'gecko_*', 'v1_auth_*'];
|
|
5
5
|
/** Usage guidance surfaced to MCP clients on initialize (`<cli> --mcp`). */
|
|
6
|
-
const instructions = '
|
|
6
|
+
const instructions = 'Tempo MCP provides access to the hosted Tempo API and documentation. Authenticated tools accept an `authorization` input (`Bearer <api key>`). List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.';
|
|
7
7
|
/**
|
|
8
8
|
* Creates an incur CLI backed by a hosted Tempo API, plus the super admin
|
|
9
9
|
* commands (`<cli> admin …`) and the remote Tempo docs tools (`<cli> docs …`).
|
|
@@ -14,7 +14,12 @@ export function from(url, options = {}) {
|
|
|
14
14
|
.create(name, {
|
|
15
15
|
description,
|
|
16
16
|
fetch: Fetch.fromRequest(url, request),
|
|
17
|
-
mcp: {
|
|
17
|
+
mcp: {
|
|
18
|
+
instructions,
|
|
19
|
+
name: 'tempo',
|
|
20
|
+
title: 'Tempo MCP',
|
|
21
|
+
tools: { exclude: excludedTools },
|
|
22
|
+
},
|
|
18
23
|
openapi,
|
|
19
24
|
openapiConfig: options.openapiConfig ?? { mode: 'namespace' },
|
|
20
25
|
version,
|
package/dist/cli/Cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAG7D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,+GAA+G;AAC/G,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;AAEzD,4EAA4E;AAC5E,MAAM,YAAY,GAChB,
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAG7D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,+GAA+G;AAC/G,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;AAEzD,4EAA4E;AAC5E,MAAM,YAAY,GAChB,kPAAkP,CAAA;AAEpP;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,GAAiB,EAAE,OAAO,GAAiB,EAAE;IAChE,MAAM,EACJ,WAAW,GAAG,eAAe,EAC7B,IAAI,GAAG,2BAA2B,EAClC,IAAI,GAAG,QAAQ,EACf,OAAO,GAAG,cAAc,EACxB,OAAO,EACP,OAAO,GAAG,OAAO,GAClB,GAAG,OAAO,CAAA;IAEX,MAAM,GAAG,GAAG,SAAS;SAClB,MAAM,CAAC,IAAI,EAAE;QACZ,WAAW;QACX,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;QACtC,GAAG,EAAE;YACH,YAAY;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;SAClC;QACD,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;QAC7D,OAAO;KACR,CAAC;SACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,IAAI,KAAK,KAAK;QAChB,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,iCAAiC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;IACpF,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tapimo",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.3",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"accounts": "^0.15.1",
|
|
19
19
|
"hono": "^4.12.26",
|
|
20
20
|
"hono-openapi": "^1.3.0",
|
|
21
|
-
"incur": "^0.4.
|
|
21
|
+
"incur": "^0.4.19",
|
|
22
22
|
"jose": "^6.2.3",
|
|
23
23
|
"kysely": "^0.29.2",
|
|
24
24
|
"mppx": "0.8.9",
|
package/src/apps/mcp.test.ts
CHANGED
|
@@ -136,6 +136,19 @@ function resultJson(result: Awaited<ReturnType<typeof toolsCall>>) {
|
|
|
136
136
|
return result.structuredContent ?? JSON.parse(result.content[0]!.text)
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
test('identifies as Tempo MCP', async () => {
|
|
140
|
+
const { host } = createHost()
|
|
141
|
+
|
|
142
|
+
expect((await initialize(host)).result).toMatchObject({
|
|
143
|
+
instructions: expect.stringContaining('Tempo MCP provides access'),
|
|
144
|
+
serverInfo: {
|
|
145
|
+
name: 'tempo',
|
|
146
|
+
title: 'Tempo MCP',
|
|
147
|
+
version: '0.0.0',
|
|
148
|
+
},
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
|
|
139
152
|
test('scopes tools to the data domain', async () => {
|
|
140
153
|
const { app, host } = createHost({ docs: docsStub() })
|
|
141
154
|
|
package/src/apps/mcp.ts
CHANGED
|
@@ -15,7 +15,7 @@ const excludedTags = ['CoinGecko', 'MCP']
|
|
|
15
15
|
|
|
16
16
|
/** Usage guidance surfaced to MCP clients on initialize. */
|
|
17
17
|
const instructions =
|
|
18
|
-
"
|
|
18
|
+
"Tempo MCP provides access to the Tempo API's data domain and documentation. Authenticated tools accept a Tempo API key sent as an `Authorization: Bearer` header on the HTTP request. List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation."
|
|
19
19
|
|
|
20
20
|
/** Zod schemas owned by the MCP endpoint's OpenAPI description. */
|
|
21
21
|
export namespace schema {
|
|
@@ -61,11 +61,22 @@ export namespace schema {
|
|
|
61
61
|
* the other route groups:
|
|
62
62
|
*
|
|
63
63
|
* ```ts
|
|
64
|
-
* App.create(options)
|
|
64
|
+
* const app = App.create(options)
|
|
65
|
+
* const fetch = app.fetch.bind(app)
|
|
66
|
+
* app.route('/', mcp({ fetch }))
|
|
65
67
|
* ```
|
|
68
|
+
*
|
|
69
|
+
* Capture `fetch` before adding request-level wrappers, so nested calls stay
|
|
70
|
+
* within the outer request's instrumentation lifecycle.
|
|
66
71
|
*/
|
|
67
72
|
export function mcp(options: mcp.Options) {
|
|
68
|
-
const {
|
|
73
|
+
const {
|
|
74
|
+
docs = 'https://mcp.tempo.xyz/mcp',
|
|
75
|
+
fetch,
|
|
76
|
+
name = 'tempo',
|
|
77
|
+
title = 'Tempo MCP',
|
|
78
|
+
version = '0.0.0',
|
|
79
|
+
} = options
|
|
69
80
|
|
|
70
81
|
// One incur instance per caller origin: the OpenAPI document is parsed once,
|
|
71
82
|
// and generated commands rebase onto the origin so tool results embed real
|
|
@@ -95,7 +106,7 @@ export function mcp(options: mcp.Options) {
|
|
|
95
106
|
const url = new URL(request.url)
|
|
96
107
|
return fetch(new Request(new URL(url.pathname + url.search, origin), request))
|
|
97
108
|
},
|
|
98
|
-
mcp: { instructions },
|
|
109
|
+
mcp: { instructions, title },
|
|
99
110
|
openapi: scope(document),
|
|
100
111
|
// `compact` + `security: false` keep tool schemas lean: no examples,
|
|
101
112
|
// oversized regexes, or per-tool credential inputs (auth rides the
|
|
@@ -271,8 +282,10 @@ export declare namespace mcp {
|
|
|
271
282
|
docs?: Source | false | undefined
|
|
272
283
|
/** In-process fetch handler for the composed app (e.g. `(request) => app.fetch(request)`). */
|
|
273
284
|
fetch: (request: Request) => Response | Promise<Response>
|
|
274
|
-
/** MCP server name. @default '
|
|
285
|
+
/** MCP server name. @default 'tempo' */
|
|
275
286
|
name?: string | undefined
|
|
287
|
+
/** Human-readable MCP server title. @default 'Tempo MCP' */
|
|
288
|
+
title?: string | undefined
|
|
276
289
|
/** MCP server version. @default '0.0.0' */
|
|
277
290
|
version?: string | undefined
|
|
278
291
|
}
|
package/src/cli/Cli.test.ts
CHANGED
|
@@ -16,6 +16,14 @@ describe('from', () => {
|
|
|
16
16
|
|
|
17
17
|
expect(cli.name).toMatchInlineSnapshot(`"tapimo"`)
|
|
18
18
|
expect(cli.description).toMatchInlineSnapshot(`"Tempo API CLI"`)
|
|
19
|
+
expect((await initialize(cli)).result).toMatchObject({
|
|
20
|
+
instructions: expect.stringContaining('Tempo MCP provides access'),
|
|
21
|
+
serverInfo: {
|
|
22
|
+
name: 'tempo',
|
|
23
|
+
title: 'Tempo MCP',
|
|
24
|
+
version: '1.2.3',
|
|
25
|
+
},
|
|
26
|
+
})
|
|
19
27
|
} finally {
|
|
20
28
|
fetch.mockRestore()
|
|
21
29
|
}
|
|
@@ -91,6 +99,34 @@ function mockHostedApi(app = TestApp.create()) {
|
|
|
91
99
|
})
|
|
92
100
|
}
|
|
93
101
|
|
|
102
|
+
async function initialize(cli: ReturnType<typeof Cli.from>) {
|
|
103
|
+
const response = await cli.fetch(
|
|
104
|
+
new Request('http://localhost/mcp', {
|
|
105
|
+
body: JSON.stringify({
|
|
106
|
+
id: 1,
|
|
107
|
+
jsonrpc: '2.0',
|
|
108
|
+
method: 'initialize',
|
|
109
|
+
params: {
|
|
110
|
+
capabilities: {},
|
|
111
|
+
clientInfo: { name: 'test-client', version: '1.0.0' },
|
|
112
|
+
protocolVersion: '2025-03-26',
|
|
113
|
+
},
|
|
114
|
+
}),
|
|
115
|
+
headers: {
|
|
116
|
+
accept: 'application/json, text/event-stream',
|
|
117
|
+
'content-type': 'application/json',
|
|
118
|
+
},
|
|
119
|
+
method: 'POST',
|
|
120
|
+
}),
|
|
121
|
+
)
|
|
122
|
+
return (await response.json()) as {
|
|
123
|
+
result: {
|
|
124
|
+
instructions: string
|
|
125
|
+
serverInfo: { name: string; title: string; version: string }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
94
130
|
async function serve(cli: ReturnType<typeof Cli.from>, argv: string[]) {
|
|
95
131
|
const output: string[] = []
|
|
96
132
|
await cli.serve(argv, {
|
package/src/cli/Cli.ts
CHANGED
|
@@ -8,7 +8,7 @@ const excludedTools = ['admin_*', 'gecko_*', 'v1_auth_*']
|
|
|
8
8
|
|
|
9
9
|
/** Usage guidance surfaced to MCP clients on initialize (`<cli> --mcp`). */
|
|
10
10
|
const instructions =
|
|
11
|
-
'
|
|
11
|
+
'Tempo MCP provides access to the hosted Tempo API and documentation. Authenticated tools accept an `authorization` input (`Bearer <api key>`). List endpoints paginate via `cursor`/`nextCursor`. `docs_*` tools search the Tempo documentation.'
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Creates an incur CLI backed by a hosted Tempo API, plus the super admin
|
|
@@ -28,7 +28,12 @@ export function from(url: string | URL, options: from.Options = {}) {
|
|
|
28
28
|
.create(name, {
|
|
29
29
|
description,
|
|
30
30
|
fetch: Fetch.fromRequest(url, request),
|
|
31
|
-
mcp: {
|
|
31
|
+
mcp: {
|
|
32
|
+
instructions,
|
|
33
|
+
name: 'tempo',
|
|
34
|
+
title: 'Tempo MCP',
|
|
35
|
+
tools: { exclude: excludedTools },
|
|
36
|
+
},
|
|
32
37
|
openapi,
|
|
33
38
|
openapiConfig: options.openapiConfig ?? { mode: 'namespace' },
|
|
34
39
|
version,
|