@emseepea/server 0.0.1 → 0.0.2
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/http.d.ts +15 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +284 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +207 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1000 -0
- package/dist/index.js.map +1 -0
- package/dist/ui.d.ts +185 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +263 -0
- package/dist/ui.js.map +1 -0
- package/package.json +3 -2
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface JsonHttpClientOptions {
|
|
2
|
+
readonly origin: string | URL;
|
|
3
|
+
readonly maxResponseBytes?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface JsonHttpGetOptions {
|
|
6
|
+
readonly pathname: string;
|
|
7
|
+
readonly searchParams?: Readonly<Record<string, string | readonly string[]>>;
|
|
8
|
+
readonly signal: AbortSignal;
|
|
9
|
+
readonly deadlineMs: number;
|
|
10
|
+
}
|
|
11
|
+
export interface JsonHttpClient {
|
|
12
|
+
readonly get: (options: JsonHttpGetOptions) => Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createJsonHttpClient(candidate: JsonHttpClientOptions): JsonHttpClient;
|
|
15
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAiDA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC7E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,qBAAqB,GAAG,cAAc,CAiCrF"}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { lookup } from "node:dns/promises";
|
|
2
|
+
import { request } from "node:https";
|
|
3
|
+
import { BlockList, isIP } from "node:net";
|
|
4
|
+
import { TextDecoder } from "node:util";
|
|
5
|
+
const MAX_RESPONSE_BYTES = 1024 * 1024;
|
|
6
|
+
const MAX_RESPONSE_HEADER_BYTES = 16 * 1024;
|
|
7
|
+
const MAX_REQUEST_TARGET_BYTES = 8 * 1024;
|
|
8
|
+
const MAX_DEADLINE_DELAY_MS = 2_147_483_647;
|
|
9
|
+
const FAILURE_MESSAGE = "Outbound JSON request failed";
|
|
10
|
+
const prohibitedIpv4Addresses = new BlockList();
|
|
11
|
+
for (const [network, prefix] of [
|
|
12
|
+
["0.0.0.0", 8],
|
|
13
|
+
["10.0.0.0", 8],
|
|
14
|
+
["100.64.0.0", 10],
|
|
15
|
+
["127.0.0.0", 8],
|
|
16
|
+
["169.254.0.0", 16],
|
|
17
|
+
["172.16.0.0", 12],
|
|
18
|
+
["192.0.0.0", 24],
|
|
19
|
+
["192.0.2.0", 24],
|
|
20
|
+
["192.88.99.0", 24],
|
|
21
|
+
["192.168.0.0", 16],
|
|
22
|
+
["198.18.0.0", 15],
|
|
23
|
+
["198.51.100.0", 24],
|
|
24
|
+
["203.0.113.0", 24],
|
|
25
|
+
["224.0.0.0", 4],
|
|
26
|
+
["240.0.0.0", 4],
|
|
27
|
+
])
|
|
28
|
+
prohibitedIpv4Addresses.addSubnet(network, prefix, "ipv4");
|
|
29
|
+
const prohibitedIpv6Addresses = new BlockList();
|
|
30
|
+
const globallyRoutableIpv6Addresses = new BlockList();
|
|
31
|
+
globallyRoutableIpv6Addresses.addSubnet("2000::", 3, "ipv6");
|
|
32
|
+
for (const [network, prefix] of [
|
|
33
|
+
["::", 128],
|
|
34
|
+
["::1", 128],
|
|
35
|
+
["::ffff:0:0", 96],
|
|
36
|
+
["64:ff9b::", 96],
|
|
37
|
+
["64:ff9b:1::", 48],
|
|
38
|
+
["100::", 64],
|
|
39
|
+
["2001::", 23],
|
|
40
|
+
["2001:db8::", 32],
|
|
41
|
+
["2002::", 16],
|
|
42
|
+
["3fff::", 20],
|
|
43
|
+
["fc00::", 7],
|
|
44
|
+
["fe80::", 10],
|
|
45
|
+
["ff00::", 8],
|
|
46
|
+
])
|
|
47
|
+
prohibitedIpv6Addresses.addSubnet(network, prefix, "ipv6");
|
|
48
|
+
export function createJsonHttpClient(candidate) {
|
|
49
|
+
assertKeys(candidate, ["origin", "maxResponseBytes"], "HTTP client options");
|
|
50
|
+
const origin = normalizeOrigin(candidate.origin);
|
|
51
|
+
const maxResponseBytes = boundedPositiveInteger(candidate.maxResponseBytes ?? MAX_RESPONSE_BYTES, "maxResponseBytes", MAX_RESPONSE_BYTES);
|
|
52
|
+
return Object.freeze({
|
|
53
|
+
async get(options) {
|
|
54
|
+
try {
|
|
55
|
+
assertKeys(options, ["pathname", "searchParams", "signal", "deadlineMs"], "HTTP GET options");
|
|
56
|
+
const url = requestUrl(origin, options.pathname, options.searchParams);
|
|
57
|
+
const operation = operationSignal(options.signal, options.deadlineMs);
|
|
58
|
+
try {
|
|
59
|
+
operation.signal.throwIfAborted();
|
|
60
|
+
const addresses = await waitFor(lookup(url.hostname, { all: true, order: "verbatim" }), operation.signal);
|
|
61
|
+
operation.signal.throwIfAborted();
|
|
62
|
+
if (addresses.length === 0 || addresses.some(({ address, family }) => !isAllowedAddress(address, family))) {
|
|
63
|
+
throw new Error(FAILURE_MESSAGE);
|
|
64
|
+
}
|
|
65
|
+
const selected = addresses[0];
|
|
66
|
+
if (!selected)
|
|
67
|
+
throw new Error(FAILURE_MESSAGE);
|
|
68
|
+
return await waitFor(readJson(url, selected, maxResponseBytes, operation.signal), operation.signal);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
operation.dispose();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
throw new Error(FAILURE_MESSAGE);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function normalizeOrigin(candidate) {
|
|
81
|
+
let url;
|
|
82
|
+
try {
|
|
83
|
+
url = new URL(candidate instanceof URL ? candidate.href : candidate);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
throw new TypeError("origin must be a valid URL");
|
|
87
|
+
}
|
|
88
|
+
const hostname = url.hostname.startsWith("[") && url.hostname.endsWith("]")
|
|
89
|
+
? url.hostname.slice(1, -1)
|
|
90
|
+
: url.hostname;
|
|
91
|
+
if (url.protocol !== "https:" || url.username || url.password || url.pathname !== "/" ||
|
|
92
|
+
url.search || url.hash || isIP(hostname) !== 0) {
|
|
93
|
+
throw new TypeError("origin must be an HTTPS origin without credentials, path, query, fragment, or IP literal");
|
|
94
|
+
}
|
|
95
|
+
return new URL(url.origin);
|
|
96
|
+
}
|
|
97
|
+
function requestUrl(origin, pathname, searchParams) {
|
|
98
|
+
if (typeof pathname !== "string" || !pathname.startsWith("/") || pathname.startsWith("//") ||
|
|
99
|
+
pathname.includes("\\") || pathname.includes("?") || pathname.includes("#")) {
|
|
100
|
+
throw new TypeError("pathname must be one root-relative URL path");
|
|
101
|
+
}
|
|
102
|
+
const url = new URL(pathname, origin);
|
|
103
|
+
if (url.origin !== origin.origin || url.protocol !== "https:" || url.username || url.password || url.hash) {
|
|
104
|
+
throw new TypeError("pathname escaped the configured origin");
|
|
105
|
+
}
|
|
106
|
+
if (searchParams !== undefined) {
|
|
107
|
+
assertPlainRecord(searchParams, "searchParams");
|
|
108
|
+
for (const [name, value] of Object.entries(searchParams).sort(([left], [right]) => left.localeCompare(right))) {
|
|
109
|
+
if (typeof value === "string") {
|
|
110
|
+
url.searchParams.append(name, value);
|
|
111
|
+
}
|
|
112
|
+
else if (Array.isArray(value) && value.every((entry) => typeof entry === "string")) {
|
|
113
|
+
for (const entry of value)
|
|
114
|
+
url.searchParams.append(name, entry);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
throw new TypeError("searchParams values must be strings or string arrays");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (Buffer.byteLength(`${url.pathname}${url.search}`, "utf8") > MAX_REQUEST_TARGET_BYTES) {
|
|
122
|
+
throw new TypeError("request target exceeds the configured size limit");
|
|
123
|
+
}
|
|
124
|
+
return url;
|
|
125
|
+
}
|
|
126
|
+
function isAllowedAddress(address, family) {
|
|
127
|
+
if (isIP(address) !== family || (family !== 4 && family !== 6))
|
|
128
|
+
return false;
|
|
129
|
+
return family === 4
|
|
130
|
+
? !prohibitedIpv4Addresses.check(address, "ipv4")
|
|
131
|
+
: globallyRoutableIpv6Addresses.check(address, "ipv6")
|
|
132
|
+
&& !prohibitedIpv6Addresses.check(address, "ipv6");
|
|
133
|
+
}
|
|
134
|
+
function operationSignal(parent, deadlineMs) {
|
|
135
|
+
if (!(parent instanceof AbortSignal) || !Number.isSafeInteger(deadlineMs) ||
|
|
136
|
+
deadlineMs - Date.now() > MAX_DEADLINE_DELAY_MS) {
|
|
137
|
+
throw new TypeError("signal and a safe-integer absolute deadlineMs are required");
|
|
138
|
+
}
|
|
139
|
+
const controller = new AbortController();
|
|
140
|
+
const abort = () => controller.abort();
|
|
141
|
+
if (parent.aborted || deadlineMs <= Date.now())
|
|
142
|
+
controller.abort();
|
|
143
|
+
else
|
|
144
|
+
parent.addEventListener("abort", abort, { once: true });
|
|
145
|
+
const timer = setTimeout(abort, Math.max(0, deadlineMs - Date.now()));
|
|
146
|
+
timer.unref();
|
|
147
|
+
return {
|
|
148
|
+
signal: controller.signal,
|
|
149
|
+
dispose() {
|
|
150
|
+
clearTimeout(timer);
|
|
151
|
+
parent.removeEventListener("abort", abort);
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async function waitFor(promise, signal) {
|
|
156
|
+
if (signal.aborted)
|
|
157
|
+
throw new Error(FAILURE_MESSAGE);
|
|
158
|
+
return await new Promise((resolve, reject) => {
|
|
159
|
+
let settled = false;
|
|
160
|
+
const finish = (callback) => {
|
|
161
|
+
if (settled)
|
|
162
|
+
return;
|
|
163
|
+
settled = true;
|
|
164
|
+
signal.removeEventListener("abort", abort);
|
|
165
|
+
callback();
|
|
166
|
+
};
|
|
167
|
+
const abort = () => finish(() => reject(new Error(FAILURE_MESSAGE)));
|
|
168
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
169
|
+
void promise.then((value) => finish(() => resolve(value)), () => finish(() => reject(new Error(FAILURE_MESSAGE))));
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function readJson(url, selected, maxResponseBytes, signal) {
|
|
173
|
+
return new Promise((resolve, reject) => {
|
|
174
|
+
let settled = false;
|
|
175
|
+
const fail = () => {
|
|
176
|
+
if (settled)
|
|
177
|
+
return;
|
|
178
|
+
settled = true;
|
|
179
|
+
reject(new Error(FAILURE_MESSAGE));
|
|
180
|
+
};
|
|
181
|
+
const requestOptions = {
|
|
182
|
+
agent: false,
|
|
183
|
+
autoSelectFamily: false,
|
|
184
|
+
headers: {
|
|
185
|
+
Accept: "application/json",
|
|
186
|
+
"Accept-Encoding": "identity",
|
|
187
|
+
Host: url.host,
|
|
188
|
+
},
|
|
189
|
+
family: selected.family,
|
|
190
|
+
lookup: (_hostname, _options, callback) => callback(null, selected.address, selected.family),
|
|
191
|
+
maxHeaderSize: MAX_RESPONSE_HEADER_BYTES,
|
|
192
|
+
method: "GET",
|
|
193
|
+
servername: url.hostname,
|
|
194
|
+
signal,
|
|
195
|
+
};
|
|
196
|
+
const outgoing = request(url, requestOptions, (incoming) => {
|
|
197
|
+
if (signal.aborted || settled) {
|
|
198
|
+
incoming.destroy();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const status = incoming.statusCode ?? 0;
|
|
202
|
+
const contentType = oneHeader(incoming.headersDistinct?.["content-type"]);
|
|
203
|
+
const contentEncoding = oneHeader(incoming.headersDistinct?.["content-encoding"]);
|
|
204
|
+
const contentLength = oneHeader(incoming.headersDistinct?.["content-length"]);
|
|
205
|
+
if (status < 200 || status > 299 || !isJsonContentType(contentType ?? undefined) ||
|
|
206
|
+
contentEncoding === null ||
|
|
207
|
+
(contentEncoding !== undefined && contentEncoding.toLowerCase() !== "identity") ||
|
|
208
|
+
contentLength === null ||
|
|
209
|
+
(contentLength !== undefined && !validContentLength(contentLength, maxResponseBytes))) {
|
|
210
|
+
incoming.destroy();
|
|
211
|
+
fail();
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const chunks = [];
|
|
215
|
+
let bytes = 0;
|
|
216
|
+
incoming.on("data", (chunk) => {
|
|
217
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
218
|
+
bytes += buffer.length;
|
|
219
|
+
if (bytes > maxResponseBytes) {
|
|
220
|
+
incoming.destroy();
|
|
221
|
+
fail();
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
chunks.push(buffer);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
incoming.once("aborted", fail);
|
|
228
|
+
incoming.once("error", fail);
|
|
229
|
+
incoming.once("close", () => {
|
|
230
|
+
if (!incoming.complete)
|
|
231
|
+
fail();
|
|
232
|
+
});
|
|
233
|
+
incoming.once("end", () => {
|
|
234
|
+
if (settled)
|
|
235
|
+
return;
|
|
236
|
+
try {
|
|
237
|
+
signal.throwIfAborted();
|
|
238
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks));
|
|
239
|
+
const value = JSON.parse(text);
|
|
240
|
+
signal.throwIfAborted();
|
|
241
|
+
settled = true;
|
|
242
|
+
resolve(value);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
fail();
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
outgoing.once("error", fail);
|
|
250
|
+
outgoing.end();
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function oneHeader(values) {
|
|
254
|
+
if (values === undefined || values.length === 0)
|
|
255
|
+
return undefined;
|
|
256
|
+
return values.length === 1 ? values[0] ?? null : null;
|
|
257
|
+
}
|
|
258
|
+
function isJsonContentType(value) {
|
|
259
|
+
return value !== undefined && /^application\/(?:json|[a-z0-9!#$&^_.+-]+\+json)(?:\s*;.*)?$/i.test(value);
|
|
260
|
+
}
|
|
261
|
+
function validContentLength(value, maximum) {
|
|
262
|
+
const length = Number(value);
|
|
263
|
+
return /^(?:0|[1-9]\d*)$/.test(value) && Number.isSafeInteger(length) && length <= maximum;
|
|
264
|
+
}
|
|
265
|
+
function assertKeys(value, allowed, label) {
|
|
266
|
+
assertPlainRecord(value, label);
|
|
267
|
+
const accepted = new Set(allowed);
|
|
268
|
+
if (Reflect.ownKeys(value).some((key) => typeof key !== "string" || !accepted.has(key))) {
|
|
269
|
+
throw new TypeError(`${label} contains an unsupported field`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function assertPlainRecord(value, label) {
|
|
273
|
+
if (typeof value !== "object" || value === null || Array.isArray(value) ||
|
|
274
|
+
(Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)) {
|
|
275
|
+
throw new TypeError(`${label} must be a plain object`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function boundedPositiveInteger(value, label, maximum) {
|
|
279
|
+
if (!Number.isSafeInteger(value) || value <= 0 || value > maximum) {
|
|
280
|
+
throw new TypeError(`${label} must be a positive integer no greater than ${maximum}`);
|
|
281
|
+
}
|
|
282
|
+
return value;
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { McpServer, type AuthMetadataOptions, type GetPromptResult, type OAuthTokenVerifier, type ReadResourceResult } from "@modelcontextprotocol/server";
|
|
2
|
+
import type { FastifyInstance } from "fastify";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
export * from "./ui.js";
|
|
5
|
+
declare const REGISTER: unique symbol;
|
|
6
|
+
declare const TOOL_NAME: unique symbol;
|
|
7
|
+
declare const TOOL_ACCESS: unique symbol;
|
|
8
|
+
declare const TOOL_STREAMING: unique symbol;
|
|
9
|
+
declare const RESOURCE_NAME: unique symbol;
|
|
10
|
+
declare const RESOURCE_URI: unique symbol;
|
|
11
|
+
declare const RESOURCE_KIND: unique symbol;
|
|
12
|
+
declare const RESOURCE_MATCHES: unique symbol;
|
|
13
|
+
declare const RESOURCE_ROUTE: unique symbol;
|
|
14
|
+
declare const PROMPT_NAME: unique symbol;
|
|
15
|
+
declare const HAS_COMPLETION: unique symbol;
|
|
16
|
+
export interface ToolPrincipal {
|
|
17
|
+
readonly clientId: string;
|
|
18
|
+
readonly scopes: readonly string[];
|
|
19
|
+
readonly resource?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface ToolContext<Access extends ToolAccess = ToolAccess> {
|
|
22
|
+
readonly signal: AbortSignal;
|
|
23
|
+
readonly deadlineMs: number;
|
|
24
|
+
readonly principal: Access extends "public" ? undefined : ToolPrincipal;
|
|
25
|
+
}
|
|
26
|
+
export interface ProgressUpdate {
|
|
27
|
+
readonly progress: number;
|
|
28
|
+
readonly total?: number;
|
|
29
|
+
readonly message?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface StreamingToolContext<Access extends ToolAccess = ToolAccess> extends ToolContext<Access> {
|
|
32
|
+
readonly reportProgress: (update: ProgressUpdate) => Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface ToolResult<Output> {
|
|
35
|
+
readonly text: string;
|
|
36
|
+
readonly data: Output;
|
|
37
|
+
}
|
|
38
|
+
export interface BackendAdapterContext {
|
|
39
|
+
readonly signal: AbortSignal;
|
|
40
|
+
readonly deadlineMs: number;
|
|
41
|
+
}
|
|
42
|
+
export type OperationContext = BackendAdapterContext;
|
|
43
|
+
export interface CompletionContext extends OperationContext {
|
|
44
|
+
readonly arguments: Readonly<Record<string, string>>;
|
|
45
|
+
}
|
|
46
|
+
export type CompletionHandler = (value: string, context: CompletionContext) => readonly string[] | Promise<readonly string[]>;
|
|
47
|
+
interface ProtectedToolAccess {
|
|
48
|
+
readonly type: "protected";
|
|
49
|
+
readonly requiredScopes: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
export type ToolAccess = "public" | "protected";
|
|
52
|
+
interface ToolDefinitionBase<Input extends z.ZodObject, Output extends z.ZodObject> {
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly title?: string;
|
|
55
|
+
readonly description: string;
|
|
56
|
+
readonly inputSchema: Input;
|
|
57
|
+
readonly outputSchema: Output;
|
|
58
|
+
}
|
|
59
|
+
export type ToolDefinition<Input extends z.ZodObject, Output extends z.ZodObject> = ToolDefinitionBase<Input, Output> & ({
|
|
60
|
+
readonly access: "public";
|
|
61
|
+
readonly requiredScopes?: never;
|
|
62
|
+
readonly handler: (input: z.output<Input>, context: ToolContext<"public">) => ToolResult<z.input<Output>> | Promise<ToolResult<z.input<Output>>>;
|
|
63
|
+
} | {
|
|
64
|
+
readonly access: "protected";
|
|
65
|
+
readonly requiredScopes: readonly string[];
|
|
66
|
+
readonly handler: (input: z.output<Input>, context: ToolContext<"protected">) => ToolResult<z.input<Output>> | Promise<ToolResult<z.input<Output>>>;
|
|
67
|
+
});
|
|
68
|
+
export type StreamingToolDefinition<Input extends z.ZodObject, Output extends z.ZodObject> = ToolDefinitionBase<Input, Output> & ({
|
|
69
|
+
readonly access: "public";
|
|
70
|
+
readonly requiredScopes?: never;
|
|
71
|
+
readonly handler: (input: z.output<Input>, context: StreamingToolContext<"public">) => ToolResult<z.input<Output>> | Promise<ToolResult<z.input<Output>>>;
|
|
72
|
+
} | {
|
|
73
|
+
readonly access: "protected";
|
|
74
|
+
readonly requiredScopes: readonly string[];
|
|
75
|
+
readonly handler: (input: z.output<Input>, context: StreamingToolContext<"protected">) => ToolResult<z.input<Output>> | Promise<ToolResult<z.input<Output>>>;
|
|
76
|
+
});
|
|
77
|
+
interface MappedToolDefinitionBase<Input extends z.ZodObject, Output extends z.ZodObject, BackendInput extends z.ZodObject, BackendOutput extends z.ZodObject> extends ToolDefinitionBase<Input, Output> {
|
|
78
|
+
readonly backendInputSchema: BackendInput;
|
|
79
|
+
readonly backendOutputSchema: BackendOutput;
|
|
80
|
+
/** Side-effect-free provider check. The tool stays listed while unavailable. */
|
|
81
|
+
readonly isAvailable?: (context: BackendAdapterContext) => boolean | Promise<boolean>;
|
|
82
|
+
readonly mapInput: (input: z.output<Input>) => z.input<BackendInput>;
|
|
83
|
+
readonly adapter: (input: z.output<BackendInput>, context: BackendAdapterContext) => unknown | Promise<unknown>;
|
|
84
|
+
readonly mapOutput: (output: z.output<BackendOutput>) => ToolResult<z.input<Output>>;
|
|
85
|
+
}
|
|
86
|
+
export type MappedToolDefinition<Input extends z.ZodObject, Output extends z.ZodObject, BackendInput extends z.ZodObject, BackendOutput extends z.ZodObject> = MappedToolDefinitionBase<Input, Output, BackendInput, BackendOutput> & {
|
|
87
|
+
readonly access: "public";
|
|
88
|
+
readonly requiredScopes?: never;
|
|
89
|
+
} | MappedToolDefinitionBase<Input, Output, BackendInput, BackendOutput> & {
|
|
90
|
+
readonly access: "protected";
|
|
91
|
+
readonly requiredScopes: readonly string[];
|
|
92
|
+
};
|
|
93
|
+
export interface EmseepeaTool {
|
|
94
|
+
readonly [TOOL_NAME]: string;
|
|
95
|
+
readonly [TOOL_ACCESS]: "public" | ProtectedToolAccess;
|
|
96
|
+
readonly [TOOL_STREAMING]: boolean;
|
|
97
|
+
readonly [REGISTER]: (server: McpServer, timeoutMs: number, maxApplicationResultBytes: number, maxProgressEvents: number, maxProgressEventBytes: number) => void;
|
|
98
|
+
}
|
|
99
|
+
export interface ResourceDefinition {
|
|
100
|
+
readonly name: string;
|
|
101
|
+
readonly uri: string;
|
|
102
|
+
readonly title?: string;
|
|
103
|
+
readonly description?: string;
|
|
104
|
+
readonly mimeType?: string;
|
|
105
|
+
readonly handler: (context: OperationContext) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
106
|
+
}
|
|
107
|
+
export interface ResourceTemplateDefinition {
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly uriTemplate: string;
|
|
110
|
+
readonly title?: string;
|
|
111
|
+
readonly description?: string;
|
|
112
|
+
readonly mimeType?: string;
|
|
113
|
+
readonly complete?: Readonly<Record<string, CompletionHandler>>;
|
|
114
|
+
readonly handler: (input: {
|
|
115
|
+
readonly uri: string;
|
|
116
|
+
readonly variables: Readonly<Record<string, string | readonly string[]>>;
|
|
117
|
+
}, context: OperationContext) => ReadResourceResult | Promise<ReadResourceResult>;
|
|
118
|
+
}
|
|
119
|
+
interface ResourceTemplateRoute {
|
|
120
|
+
readonly protocol: string;
|
|
121
|
+
readonly host: string;
|
|
122
|
+
readonly segments: readonly (string | undefined)[];
|
|
123
|
+
}
|
|
124
|
+
export interface EmseepeaResource {
|
|
125
|
+
readonly [RESOURCE_NAME]: string;
|
|
126
|
+
readonly [RESOURCE_URI]: string;
|
|
127
|
+
readonly [RESOURCE_KIND]: "static" | "template";
|
|
128
|
+
readonly [RESOURCE_MATCHES]?: (uri: string) => boolean;
|
|
129
|
+
readonly [RESOURCE_ROUTE]?: ResourceTemplateRoute;
|
|
130
|
+
readonly [HAS_COMPLETION]: boolean;
|
|
131
|
+
readonly [REGISTER]: (server: McpServer, timeoutMs: number, maxApplicationResultBytes: number) => void;
|
|
132
|
+
}
|
|
133
|
+
type NonStringPromptArgumentKeys<Args extends z.ZodObject> = {
|
|
134
|
+
[Key in keyof z.input<Args>]-?: Exclude<z.input<Args>[Key], undefined> extends string ? never : Key;
|
|
135
|
+
}[keyof z.input<Args>];
|
|
136
|
+
type PromptInputConstraint<Args extends z.ZodObject> = [
|
|
137
|
+
NonStringPromptArgumentKeys<Args>
|
|
138
|
+
] extends [never] ? object : {
|
|
139
|
+
readonly promptArgumentsMustAcceptStrings: never;
|
|
140
|
+
};
|
|
141
|
+
export type PromptDefinition<Args extends z.ZodObject> = {
|
|
142
|
+
readonly name: string;
|
|
143
|
+
readonly title?: string;
|
|
144
|
+
readonly description?: string;
|
|
145
|
+
readonly argsSchema: Args;
|
|
146
|
+
readonly complete?: Readonly<Partial<Record<Extract<keyof z.input<Args>, string>, CompletionHandler>>>;
|
|
147
|
+
readonly handler: (args: z.output<Args>, context: OperationContext) => GetPromptResult | Promise<GetPromptResult>;
|
|
148
|
+
} & PromptInputConstraint<Args>;
|
|
149
|
+
export interface EmseepeaPrompt {
|
|
150
|
+
readonly [PROMPT_NAME]: string;
|
|
151
|
+
readonly [HAS_COMPLETION]: boolean;
|
|
152
|
+
readonly [REGISTER]: (server: McpServer, timeoutMs: number, maxApplicationResultBytes: number) => void;
|
|
153
|
+
}
|
|
154
|
+
export interface OAuthResourceServerOptions {
|
|
155
|
+
readonly verifier: OAuthTokenVerifier;
|
|
156
|
+
readonly metadata: Omit<AuthMetadataOptions, "dangerouslyAllowInsecureIssuerUrl"> & {
|
|
157
|
+
readonly dangerouslyAllowInsecureIssuerUrl?: false;
|
|
158
|
+
};
|
|
159
|
+
readonly verificationTimeoutMs?: number;
|
|
160
|
+
}
|
|
161
|
+
export interface EmseepeaOptions {
|
|
162
|
+
readonly name: string;
|
|
163
|
+
readonly version: string;
|
|
164
|
+
readonly instructions?: string;
|
|
165
|
+
readonly tools?: readonly EmseepeaTool[];
|
|
166
|
+
readonly resources?: readonly EmseepeaResource[];
|
|
167
|
+
readonly prompts?: readonly EmseepeaPrompt[];
|
|
168
|
+
readonly maxRequestBytes?: number;
|
|
169
|
+
readonly maxApplicationResultBytes?: number;
|
|
170
|
+
readonly maxProgressEvents?: number;
|
|
171
|
+
readonly maxProgressEventBytes?: number;
|
|
172
|
+
readonly operationTimeoutMs?: number;
|
|
173
|
+
readonly deployment?: DeploymentProfile;
|
|
174
|
+
readonly oauth?: OAuthResourceServerOptions;
|
|
175
|
+
}
|
|
176
|
+
export type DeploymentProfile = {
|
|
177
|
+
readonly mode: "loopback";
|
|
178
|
+
} | {
|
|
179
|
+
readonly mode: "production-behind-proxy";
|
|
180
|
+
readonly allowedAuthorities: readonly string[];
|
|
181
|
+
readonly allowedOrigins: readonly string[];
|
|
182
|
+
readonly trustedProxyAddresses: readonly string[];
|
|
183
|
+
readonly rateLimit: Readonly<RateLimitOptions>;
|
|
184
|
+
};
|
|
185
|
+
export interface ServeOptions {
|
|
186
|
+
readonly host?: "127.0.0.1" | "::1" | "localhost" | "0.0.0.0" | "::";
|
|
187
|
+
readonly port?: number;
|
|
188
|
+
readonly shutdownTimeoutMs?: number;
|
|
189
|
+
}
|
|
190
|
+
export interface RunningEmseepeaServer {
|
|
191
|
+
readonly url: URL;
|
|
192
|
+
readonly close: () => Promise<void>;
|
|
193
|
+
}
|
|
194
|
+
interface RateLimitOptions {
|
|
195
|
+
maxRequests: number;
|
|
196
|
+
windowMs: number;
|
|
197
|
+
maxClients: number;
|
|
198
|
+
}
|
|
199
|
+
export declare function defineTool<Input extends z.ZodObject, Output extends z.ZodObject>(definition: ToolDefinition<Input, Output>): EmseepeaTool;
|
|
200
|
+
export declare function defineStreamingTool<Input extends z.ZodObject, Output extends z.ZodObject>(definition: StreamingToolDefinition<Input, Output>): EmseepeaTool;
|
|
201
|
+
export declare function defineMappedTool<Input extends z.ZodObject, Output extends z.ZodObject, BackendInput extends z.ZodObject, BackendOutput extends z.ZodObject>(definition: MappedToolDefinition<Input, Output, BackendInput, BackendOutput>): EmseepeaTool;
|
|
202
|
+
export declare function defineResource(definition: ResourceDefinition): EmseepeaResource;
|
|
203
|
+
export declare function defineResourceTemplate(definition: ResourceTemplateDefinition): EmseepeaResource;
|
|
204
|
+
export declare function definePrompt<Args extends z.ZodObject>(definition: PromptDefinition<Args>): EmseepeaPrompt;
|
|
205
|
+
export declare function createEmseepea(options: EmseepeaOptions): FastifyInstance;
|
|
206
|
+
export declare function serveEmseepea(app: FastifyInstance, options?: ServeOptions): Promise<RunningEmseepeaServer>;
|
|
207
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|