@jrmc/adonis-mcp 1.0.0-alpha.9 → 1.0.0-beta.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/README.md +811 -26
- package/build/commands/commands.json +1 -1
- package/build/commands/inspector.d.ts +16 -0
- package/build/commands/inspector.d.ts.map +1 -0
- package/build/commands/inspector.js +54 -0
- package/build/commands/make/prompt.d.ts +16 -0
- package/build/commands/make/prompt.d.ts.map +1 -0
- package/build/commands/make/prompt.js +33 -0
- package/build/commands/make/resource.d.ts +16 -0
- package/build/commands/make/resource.d.ts.map +1 -0
- package/build/commands/make/resource.js +33 -0
- package/build/commands/make/tool.d.ts.map +1 -1
- package/build/commands/make/tool.js +0 -2
- package/build/configure.d.ts.map +1 -1
- package/build/configure.js +7 -0
- package/build/index.d.ts +2 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -0
- package/build/providers/mcp_provider.d.ts +3 -0
- package/build/providers/mcp_provider.d.ts.map +1 -1
- package/build/providers/mcp_provider.js +35 -12
- package/build/src/define_config.d.ts.map +1 -1
- package/build/src/define_config.js +0 -3
- package/build/src/enums/error.d.ts.map +1 -1
- package/build/src/enums/error.js +0 -1
- package/build/src/request.d.ts +1 -1
- package/build/src/response.d.ts +24 -23
- package/build/src/response.d.ts.map +1 -1
- package/build/src/response.js +49 -13
- package/build/src/server/annotations/annotations.d.ts +10 -0
- package/build/src/server/annotations/annotations.d.ts.map +1 -0
- package/build/src/server/annotations/annotations.js +9 -0
- package/build/src/server/annotations/audience.d.ts +22 -0
- package/build/src/server/annotations/audience.d.ts.map +1 -0
- package/build/src/server/annotations/audience.js +28 -0
- package/build/src/server/annotations/is_destructive.d.ts +17 -0
- package/build/src/server/annotations/is_destructive.d.ts.map +1 -0
- package/build/src/server/annotations/is_destructive.js +24 -0
- package/build/src/server/annotations/is_idempotent.d.ts +17 -0
- package/build/src/server/annotations/is_idempotent.d.ts.map +1 -0
- package/build/src/server/annotations/is_idempotent.js +24 -0
- package/build/src/server/annotations/is_open_world.d.ts +17 -0
- package/build/src/server/annotations/is_open_world.d.ts.map +1 -0
- package/build/src/server/annotations/is_open_world.js +24 -0
- package/build/src/server/annotations/is_read_only.d.ts +17 -0
- package/build/src/server/annotations/is_read_only.d.ts.map +1 -0
- package/build/src/server/annotations/is_read_only.js +24 -0
- package/build/src/server/annotations/last_modified.d.ts +21 -0
- package/build/src/server/annotations/last_modified.d.ts.map +1 -0
- package/build/src/server/annotations/last_modified.js +28 -0
- package/build/src/server/annotations/priority.d.ts +21 -0
- package/build/src/server/annotations/priority.d.ts.map +1 -0
- package/build/src/server/annotations/priority.js +31 -0
- package/build/src/server/annotations/tool_annotations.d.ts +11 -0
- package/build/src/server/annotations/tool_annotations.d.ts.map +1 -0
- package/build/src/server/annotations/tool_annotations.js +10 -0
- package/build/src/server/contents/audio.d.ts +24 -0
- package/build/src/server/contents/audio.d.ts.map +1 -0
- package/build/src/server/contents/audio.js +57 -0
- package/build/src/server/contents/blob.d.ts +20 -0
- package/build/src/server/contents/blob.d.ts.map +1 -0
- package/build/src/server/contents/blob.js +42 -0
- package/build/src/server/contents/embedded_resource.d.ts +25 -0
- package/build/src/server/contents/embedded_resource.d.ts.map +1 -0
- package/build/src/server/contents/embedded_resource.js +72 -0
- package/build/src/server/contents/error.d.ts +15 -0
- package/build/src/server/contents/error.d.ts.map +1 -0
- package/build/src/server/contents/error.js +16 -0
- package/build/src/server/contents/image.d.ts +24 -0
- package/build/src/server/contents/image.d.ts.map +1 -0
- package/build/src/server/contents/image.js +57 -0
- package/build/src/server/contents/resource_link.d.ts +22 -0
- package/build/src/server/contents/resource_link.d.ts.map +1 -0
- package/build/src/server/contents/resource_link.js +55 -0
- package/build/src/server/contents/structured.d.ts +20 -0
- package/build/src/server/contents/structured.d.ts.map +1 -0
- package/build/src/server/contents/structured.js +26 -0
- package/build/src/server/contents/text.d.ts +24 -0
- package/build/src/server/contents/text.d.ts.map +1 -0
- package/build/src/server/contents/text.js +61 -0
- package/build/src/server/context.d.ts +11 -6
- package/build/src/server/context.d.ts.map +1 -1
- package/build/src/server/context.js +30 -2
- package/build/src/server/contracts/content.d.ts +16 -0
- package/build/src/server/contracts/content.d.ts.map +1 -0
- package/build/src/server/contracts/content.js +8 -0
- package/build/src/server/contracts/context.d.ts +29 -0
- package/build/src/server/contracts/context.d.ts.map +1 -0
- package/build/src/server/contracts/response.d.ts +26 -0
- package/build/src/server/contracts/response.d.ts.map +1 -0
- package/build/src/{types → server/contracts}/transport.d.ts +2 -2
- package/build/src/server/contracts/transport.d.ts.map +1 -0
- package/build/src/server/contracts/transport.js +7 -0
- package/build/src/server/controllers/mcp_controller.d.ts.map +1 -1
- package/build/src/server/controllers/mcp_controller.js +0 -3
- package/build/src/server/exceptions/jsonrpc_exception.d.ts +6 -5
- package/build/src/server/exceptions/jsonrpc_exception.d.ts.map +1 -1
- package/build/src/server/exceptions/jsonrpc_exception.js +18 -9
- package/build/src/server/methods/call_tool.d.ts +2 -2
- package/build/src/server/methods/call_tool.d.ts.map +1 -1
- package/build/src/server/methods/call_tool.js +42 -17
- package/build/src/server/methods/completion.d.ts +12 -0
- package/build/src/server/methods/completion.d.ts.map +1 -0
- package/build/src/server/methods/completion.js +45 -0
- package/build/src/server/methods/get_prompt.d.ts +2 -2
- package/build/src/server/methods/get_prompt.d.ts.map +1 -1
- package/build/src/server/methods/get_prompt.js +55 -2
- package/build/src/server/methods/initialize.d.ts +2 -2
- package/build/src/server/methods/initialize.d.ts.map +1 -1
- package/build/src/server/methods/initialize.js +4 -1
- package/build/src/server/methods/list_prompts.d.ts +2 -2
- package/build/src/server/methods/list_prompts.d.ts.map +1 -1
- package/build/src/server/methods/list_prompts.js +24 -3
- package/build/src/server/methods/list_resource_templates.d.ts +12 -0
- package/build/src/server/methods/list_resource_templates.d.ts.map +1 -0
- package/build/src/server/methods/list_resource_templates.js +34 -0
- package/build/src/server/methods/list_resources.d.ts +2 -2
- package/build/src/server/methods/list_resources.d.ts.map +1 -1
- package/build/src/server/methods/list_resources.js +24 -3
- package/build/src/server/methods/list_tools.d.ts +2 -2
- package/build/src/server/methods/list_tools.d.ts.map +1 -1
- package/build/src/server/methods/list_tools.js +5 -17
- package/build/src/server/methods/ping.d.ts +2 -2
- package/build/src/server/methods/ping.d.ts.map +1 -1
- package/build/src/server/methods/ping.js +1 -1
- package/build/src/server/methods/read_resource.d.ts +2 -2
- package/build/src/server/methods/read_resource.d.ts.map +1 -1
- package/build/src/server/methods/read_resource.js +20 -2
- package/build/src/server/pagination/cursor_paginator.d.ts +2 -4
- package/build/src/server/pagination/cursor_paginator.d.ts.map +1 -1
- package/build/src/server/pagination/cursor_paginator.js +11 -11
- package/build/src/server/prompt.d.ts +27 -0
- package/build/src/server/prompt.d.ts.map +1 -0
- package/build/src/server/prompt.js +32 -0
- package/build/src/server/resource.d.ts +23 -0
- package/build/src/server/resource.d.ts.map +1 -0
- package/build/src/server/resource.js +40 -0
- package/build/src/server/tool.d.ts +19 -9
- package/build/src/server/tool.d.ts.map +1 -1
- package/build/src/server/tool.js +21 -0
- package/build/src/server/transports/fake_transport.d.ts +19 -1
- package/build/src/server/transports/fake_transport.d.ts.map +1 -1
- package/build/src/server/transports/fake_transport.js +28 -1
- package/build/src/server/transports/http_transport.d.ts +4 -3
- package/build/src/server/transports/http_transport.d.ts.map +1 -1
- package/build/src/server/transports/http_transport.js +14 -9
- package/build/src/server/transports/stdio_transport.d.ts +2 -2
- package/build/src/server/transports/stdio_transport.d.ts.map +1 -1
- package/build/src/server/transports/stdio_transport.js +0 -3
- package/build/src/server.d.ts +4 -3
- package/build/src/server.d.ts.map +1 -1
- package/build/src/server.js +15 -9
- package/build/src/types/config.d.ts +1 -0
- package/build/src/types/config.d.ts.map +1 -1
- package/build/src/types/content.d.ts +35 -0
- package/build/src/types/content.d.ts.map +1 -0
- package/build/src/types/content.js +7 -0
- package/build/src/types/context.d.ts +30 -18
- package/build/src/types/context.d.ts.map +1 -1
- package/build/src/types/jsonrpc.d.ts +406 -0
- package/build/src/types/jsonrpc.d.ts.map +1 -0
- package/build/src/types/jsonrpc.js +7 -0
- package/build/src/types/request.d.ts +3 -37
- package/build/src/types/request.d.ts.map +1 -1
- package/build/src/types/response.d.ts +10 -39
- package/build/src/types/response.d.ts.map +1 -1
- package/build/src/utils/find_resource_pattern.d.ts +19 -0
- package/build/src/utils/find_resource_pattern.d.ts.map +1 -0
- package/build/src/utils/find_resource_pattern.js +35 -0
- package/build/src/utils/stdio.d.ts +2 -3
- package/build/src/utils/stdio.d.ts.map +1 -1
- package/build/src/utils/stdio.js +7 -7
- package/build/src/utils/uri_template.d.ts +25 -0
- package/build/src/utils/uri_template.d.ts.map +1 -0
- package/build/src/utils/uri_template.js +241 -0
- package/build/stubs/config.ts.stub +0 -1
- package/build/stubs/make/mcp/prompts/main.ts.stub +32 -16
- package/build/stubs/make/mcp/resources/main.ts.stub +13 -19
- package/build/stubs/make/mcp/tools/main.ts.stub +11 -13
- package/build/stubs/make/middleware/mcp_middleware.ts.stub +48 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -4
- package/build/src/types/notification.d.ts +0 -14
- package/build/src/types/notification.d.ts.map +0 -1
- package/build/src/types/transport.d.ts.map +0 -1
- /package/build/src/{types/notification.js → server/contracts/context.js} +0 -0
- /package/build/src/{types/transport.js → server/contracts/response.js} +0 -0
|
@@ -7,34 +7,59 @@
|
|
|
7
7
|
import { ErrorCode } from '../../enums/error.js';
|
|
8
8
|
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
9
|
import Response from '../../response.js';
|
|
10
|
+
import ErrorContent from '../contents/error.js';
|
|
11
|
+
import ResourceLink from '../contents/resource_link.js';
|
|
12
|
+
import EmbeddedResource from '../contents/embedded_resource.js';
|
|
13
|
+
import Structured from '../contents/structured.js';
|
|
10
14
|
export default class CallTool {
|
|
11
15
|
async handle(ctx) {
|
|
12
|
-
if (ctx.request.method !== 'tools/call') {
|
|
13
|
-
throw new JsonRpcException(`The request method ${ctx.request.method} is not valid for tools/call handler.`, ErrorCode.MethodNotFound, ctx.request.id);
|
|
14
|
-
}
|
|
15
16
|
const params = ctx.request.params;
|
|
16
17
|
if (!params?.name) {
|
|
17
18
|
throw new JsonRpcException(`The tool name is required.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
18
19
|
}
|
|
19
|
-
const
|
|
20
|
-
if (!
|
|
21
|
-
throw new JsonRpcException(`The tool ${params.name} was not found.`, ErrorCode.
|
|
20
|
+
const pathToTool = ctx.tools[params.name];
|
|
21
|
+
if (!pathToTool) {
|
|
22
|
+
throw new JsonRpcException(`The tool ${params.name} was not found.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
23
|
+
}
|
|
24
|
+
let Tool;
|
|
25
|
+
try {
|
|
26
|
+
const module = await import(pathToTool);
|
|
27
|
+
Tool = module.default;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new JsonRpcException(`Failed to import tool ${params.name}: ${error.message}`, ErrorCode.InternalError, ctx.request.id);
|
|
22
31
|
}
|
|
23
|
-
|
|
32
|
+
;
|
|
24
33
|
ctx.args = params.arguments ?? {};
|
|
25
34
|
const tool = new Tool(ctx);
|
|
26
|
-
const
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
result = { content: data };
|
|
31
|
-
}
|
|
32
|
-
else if (data.code) {
|
|
33
|
-
error = data;
|
|
35
|
+
const contents = await tool.handle(ctx);
|
|
36
|
+
let data;
|
|
37
|
+
if (!Array.isArray(contents)) {
|
|
38
|
+
data = [contents];
|
|
34
39
|
}
|
|
35
40
|
else {
|
|
36
|
-
|
|
41
|
+
data = contents;
|
|
42
|
+
}
|
|
43
|
+
let isError = false;
|
|
44
|
+
const result = { content: [] };
|
|
45
|
+
for await (const obj of data) {
|
|
46
|
+
if (obj instanceof ResourceLink || obj instanceof EmbeddedResource) {
|
|
47
|
+
await obj.preProcess(ctx);
|
|
48
|
+
}
|
|
49
|
+
if (obj instanceof Structured) {
|
|
50
|
+
result.structuredContent = obj.structuredContent;
|
|
51
|
+
}
|
|
52
|
+
else if (obj instanceof ErrorContent) {
|
|
53
|
+
isError = true;
|
|
54
|
+
result.content.push(await obj.toTool(tool));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
result.content.push((await obj.toTool(tool)));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (isError) {
|
|
61
|
+
result.isError = true;
|
|
37
62
|
}
|
|
38
|
-
return Response.toJsonRpc({ id: ctx.request.id, result
|
|
63
|
+
return Response.toJsonRpc({ id: ctx.request.id, result });
|
|
39
64
|
}
|
|
40
65
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jrmc/adonis-mcp
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
|
+
*/
|
|
7
|
+
import type { CompleteContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
|
+
export default class Completion implements Method {
|
|
10
|
+
handle(ctx: CompleteContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/completion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,MAAM;IACzC,MAAM,CAAC,GAAG,EAAE,eAAe;CA6ClC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jrmc/adonis-mcp
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
|
+
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
|
+
import Response from '../../response.js';
|
|
10
|
+
export default class Completion {
|
|
11
|
+
async handle(ctx) {
|
|
12
|
+
const params = ctx.request.params;
|
|
13
|
+
if (!params?.argument?.name || !params?.argument?.value) {
|
|
14
|
+
throw new JsonRpcException('The argument name and value are required.', ErrorCode.InvalidParams, ctx.request.id);
|
|
15
|
+
}
|
|
16
|
+
const argument = params.argument;
|
|
17
|
+
const context = params.context;
|
|
18
|
+
const ref = params.ref;
|
|
19
|
+
let path = null;
|
|
20
|
+
let key = null;
|
|
21
|
+
if (ref && ref.type === 'ref/prompt') {
|
|
22
|
+
key = ref.name;
|
|
23
|
+
path = ctx.prompts[key];
|
|
24
|
+
}
|
|
25
|
+
else if (ref && ref.type === 'ref/resource') {
|
|
26
|
+
key = ref.uri;
|
|
27
|
+
path = ctx.resources[key];
|
|
28
|
+
}
|
|
29
|
+
if (!path) {
|
|
30
|
+
throw new JsonRpcException(`${key} was not found.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
31
|
+
}
|
|
32
|
+
const { default: Model } = await import(path);
|
|
33
|
+
const entity = new Model(ctx);
|
|
34
|
+
let args = {};
|
|
35
|
+
if (context?.arguments) {
|
|
36
|
+
args = { ...args, ...context.arguments };
|
|
37
|
+
}
|
|
38
|
+
;
|
|
39
|
+
ctx.args = { ...args, [argument.name]: argument.value };
|
|
40
|
+
const result = {
|
|
41
|
+
completion: await entity.complete(ctx),
|
|
42
|
+
};
|
|
43
|
+
return Response.toJsonRpc({ id: ctx.request.id, result });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
7
|
import type { Method } from '../../types/method.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { PromptContext } from '../../types/context.js';
|
|
9
9
|
export default class GetPrompt implements Method {
|
|
10
|
-
handle(ctx:
|
|
10
|
+
handle(ctx: PromptContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=get_prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_prompt.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/get_prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"get_prompt.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/get_prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAmB,MAAM,wBAAwB,CAAA;AAY5E,MAAM,CAAC,OAAO,OAAO,SAAU,YAAW,MAAM;IACxC,MAAM,CAAC,GAAG,EAAE,aAAa;CAoFhC"}
|
|
@@ -4,9 +4,62 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
|
+
import EmbeddedResource from '../contents/embedded_resource.js';
|
|
10
|
+
import Text from '../contents/text.js';
|
|
11
|
+
import Image from '../contents/image.js';
|
|
12
|
+
import Audio from '../contents/audio.js';
|
|
7
13
|
import Response from '../../response.js';
|
|
8
14
|
export default class GetPrompt {
|
|
9
|
-
handle(ctx) {
|
|
10
|
-
|
|
15
|
+
async handle(ctx) {
|
|
16
|
+
const params = ctx.request.params;
|
|
17
|
+
if (!params?.name) {
|
|
18
|
+
throw new JsonRpcException(`The prompt name is required.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
19
|
+
}
|
|
20
|
+
const pathToPrompt = ctx.prompts[params.name];
|
|
21
|
+
if (!pathToPrompt) {
|
|
22
|
+
throw new JsonRpcException(`The prompt ${params.name} was not found.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
23
|
+
}
|
|
24
|
+
const { default: Prompt } = await import(pathToPrompt);
|
|
25
|
+
ctx.args = params.arguments ?? {};
|
|
26
|
+
const prompt = new Prompt(ctx);
|
|
27
|
+
const contents = await prompt.handle(ctx);
|
|
28
|
+
let data;
|
|
29
|
+
if (!Array.isArray(contents)) {
|
|
30
|
+
data = [contents];
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
data = contents;
|
|
34
|
+
}
|
|
35
|
+
if (!data || data.length === 0) {
|
|
36
|
+
throw new JsonRpcException(`The prompt ${params.name} returned no content.`, ErrorCode.InternalError, ctx.request.id);
|
|
37
|
+
}
|
|
38
|
+
let messages = [];
|
|
39
|
+
for await (const content of data) {
|
|
40
|
+
if (content instanceof EmbeddedResource) {
|
|
41
|
+
await content.preProcess(ctx);
|
|
42
|
+
}
|
|
43
|
+
if (content instanceof Text ||
|
|
44
|
+
content instanceof Image ||
|
|
45
|
+
content instanceof Audio ||
|
|
46
|
+
content instanceof EmbeddedResource) {
|
|
47
|
+
if (!content || !content.role) {
|
|
48
|
+
throw new JsonRpcException(`Invalid content returned from prompt ${params.name}.`, ErrorCode.InternalError, ctx.request.id);
|
|
49
|
+
}
|
|
50
|
+
messages.push({
|
|
51
|
+
role: content.role,
|
|
52
|
+
content: await content.toPrompt(prompt),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (messages.length === 0) {
|
|
57
|
+
throw new JsonRpcException(`The prompt ${params.name} returned no valid messages.`, ErrorCode.InternalError, ctx.request.id);
|
|
58
|
+
}
|
|
59
|
+
const result = {
|
|
60
|
+
description: prompt.description,
|
|
61
|
+
messages,
|
|
62
|
+
};
|
|
63
|
+
return Response.toJsonRpc({ id: ctx.request.id, result });
|
|
11
64
|
}
|
|
12
65
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
-
import type { Method } from '../../types/method.js';
|
|
8
7
|
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
9
|
export default class Initialize implements Method {
|
|
10
|
-
handle(ctx: McpContext): import("../../types/
|
|
10
|
+
handle(ctx: McpContext): import("../../types/jsonrpc.js").JsonRpcResponse;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=initialize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/initialize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/initialize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAMnD,MAAM,CAAC,OAAO,OAAO,UAAW,YAAW,MAAM;IAC/C,MAAM,CAAC,GAAG,EAAE,UAAU;CAoCvB"}
|
|
@@ -14,7 +14,10 @@ export default class Initialize {
|
|
|
14
14
|
}
|
|
15
15
|
const requestedVersion = ctx.request.params.protocolVersion ?? null;
|
|
16
16
|
if (requestedVersion !== null && !ctx.supportedProtocolVersions.includes(requestedVersion)) {
|
|
17
|
-
throw new JsonRpcException('Unsupported protocol version', ErrorCode.
|
|
17
|
+
throw new JsonRpcException('Unsupported protocol version', ErrorCode.InvalidParams, ctx.request.id, {
|
|
18
|
+
supported: ctx.supportedProtocolVersions,
|
|
19
|
+
requested: requestedVersion,
|
|
20
|
+
});
|
|
18
21
|
}
|
|
19
22
|
const protocolVersion = requestedVersion ?? ctx.supportedProtocolVersions[0];
|
|
20
23
|
const result = {
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
-
import type { Method } from '../../types/method.js';
|
|
8
7
|
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
9
|
export default class ListPrompts implements Method {
|
|
10
|
-
handle(ctx: McpContext): import("../../types/
|
|
10
|
+
handle(ctx: McpContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=list_prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_prompts.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"list_prompts.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,WAAY,YAAW,MAAM;IAC1C,MAAM,CAAC,GAAG,EAAE,UAAU;CAoC7B"}
|
|
@@ -4,10 +4,31 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
|
+
import { CursorPaginator } from '../pagination/cursor_paginator.js';
|
|
7
10
|
import Response from '../../response.js';
|
|
8
11
|
export default class ListPrompts {
|
|
9
|
-
handle(ctx) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
async handle(ctx) {
|
|
13
|
+
let nextCursor;
|
|
14
|
+
const paginator = new CursorPaginator(Object.values(ctx.prompts), ctx.getPerPage(), ctx.request.params?.cursor);
|
|
15
|
+
const paginatedPrompts = paginator.paginate('prompts');
|
|
16
|
+
const prompts = await Promise.all(paginatedPrompts['prompts'].map(async (filepath) => {
|
|
17
|
+
try {
|
|
18
|
+
const { default: Prompt } = await import(filepath);
|
|
19
|
+
const prompt = new Prompt();
|
|
20
|
+
return prompt.toJson();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new JsonRpcException(`Error listing prompt`, ErrorCode.InternalError, ctx.request.id, { error });
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
if (paginatedPrompts.nextCursor) {
|
|
27
|
+
nextCursor = paginatedPrompts.nextCursor;
|
|
28
|
+
}
|
|
29
|
+
return Response.toJsonRpc({
|
|
30
|
+
id: ctx.request.id,
|
|
31
|
+
result: { prompts, nextCursor },
|
|
32
|
+
});
|
|
12
33
|
}
|
|
13
34
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jrmc/adonis-mcp
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
|
+
*/
|
|
7
|
+
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
|
+
export default class ListResourceTemplates implements Method {
|
|
10
|
+
handle(ctx: McpContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=list_resource_templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list_resource_templates.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_resource_templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,qBAAsB,YAAW,MAAM;IACpD,MAAM,CAAC,GAAG,EAAE,UAAU;CAoC7B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jrmc/adonis-mcp
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
|
+
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
|
+
import { CursorPaginator } from '../pagination/cursor_paginator.js';
|
|
10
|
+
import Response from '../../response.js';
|
|
11
|
+
export default class ListResourceTemplates {
|
|
12
|
+
async handle(ctx) {
|
|
13
|
+
let nextCursor;
|
|
14
|
+
const paginator = new CursorPaginator(Object.values(await ctx.getResourceTemplates()), ctx.getPerPage(), ctx.request.params?.cursor);
|
|
15
|
+
const paginatedResources = paginator.paginate('resourceTemplates');
|
|
16
|
+
const resourceTemplates = await Promise.all(paginatedResources['resourceTemplates'].map(async (filepath) => {
|
|
17
|
+
try {
|
|
18
|
+
const { default: Resource } = await import(filepath);
|
|
19
|
+
const resource = new Resource();
|
|
20
|
+
return resource.toJson();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new JsonRpcException(`Error listing resource`, ErrorCode.InternalError, ctx.request.id, { error });
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
if (paginatedResources.nextCursor) {
|
|
27
|
+
nextCursor = paginatedResources.nextCursor;
|
|
28
|
+
}
|
|
29
|
+
return Response.toJsonRpc({
|
|
30
|
+
id: ctx.request.id,
|
|
31
|
+
result: { resourceTemplates, nextCursor },
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
-
import type { Method } from '../../types/method.js';
|
|
8
7
|
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
9
|
export default class ListResources implements Method {
|
|
10
|
-
handle(ctx: McpContext): import("../../types/
|
|
10
|
+
handle(ctx: McpContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=list_resources.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_resources.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"list_resources.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,MAAM;IAC5C,MAAM,CAAC,GAAG,EAAE,UAAU;CAoC7B"}
|
|
@@ -4,10 +4,31 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
9
|
+
import { CursorPaginator } from '../pagination/cursor_paginator.js';
|
|
7
10
|
import Response from '../../response.js';
|
|
8
11
|
export default class ListResources {
|
|
9
|
-
handle(ctx) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
async handle(ctx) {
|
|
13
|
+
let nextCursor;
|
|
14
|
+
const paginator = new CursorPaginator(Object.values(await ctx.getResources()), ctx.getPerPage(), ctx.request.params?.cursor);
|
|
15
|
+
const paginatedResources = paginator.paginate('resources');
|
|
16
|
+
const resources = await Promise.all(paginatedResources['resources'].map(async (filepath) => {
|
|
17
|
+
try {
|
|
18
|
+
const { default: Resource } = await import(filepath);
|
|
19
|
+
const resource = new Resource();
|
|
20
|
+
return resource.toJson();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new JsonRpcException(`Error listing resource`, ErrorCode.InternalError, ctx.request.id, { error });
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
if (paginatedResources.nextCursor) {
|
|
27
|
+
nextCursor = paginatedResources.nextCursor;
|
|
28
|
+
}
|
|
29
|
+
return Response.toJsonRpc({
|
|
30
|
+
id: ctx.request.id,
|
|
31
|
+
result: { resources, nextCursor },
|
|
32
|
+
});
|
|
12
33
|
}
|
|
13
34
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
-
import type { Method } from '../../types/method.js';
|
|
8
7
|
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
9
|
export default class ListTools implements Method {
|
|
10
|
-
handle(ctx: McpContext): Promise<import("../../types/
|
|
10
|
+
handle(ctx: McpContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=list_tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list_tools.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"list_tools.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/list_tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAOnD,MAAM,CAAC,OAAO,OAAO,SAAU,YAAW,MAAM;IACxC,MAAM,CAAC,GAAG,EAAE,UAAU;CAoC7B"}
|
|
@@ -17,22 +17,7 @@ export default class ListTools {
|
|
|
17
17
|
try {
|
|
18
18
|
const { default: Tool } = await import(filepath);
|
|
19
19
|
const tool = new Tool();
|
|
20
|
-
|
|
21
|
-
? tool.schema()
|
|
22
|
-
: {
|
|
23
|
-
type: 'object',
|
|
24
|
-
properties: {},
|
|
25
|
-
};
|
|
26
|
-
return {
|
|
27
|
-
name: tool.name,
|
|
28
|
-
title: tool.title,
|
|
29
|
-
description: tool.description,
|
|
30
|
-
inputSchema: {
|
|
31
|
-
type: schema.type,
|
|
32
|
-
properties: schema.properties,
|
|
33
|
-
required: schema.required ?? [],
|
|
34
|
-
},
|
|
35
|
-
};
|
|
20
|
+
return tool.toJson();
|
|
36
21
|
}
|
|
37
22
|
catch (error) {
|
|
38
23
|
throw new JsonRpcException(`Error listing tool`, ErrorCode.InternalError, ctx.request.id, { error });
|
|
@@ -41,6 +26,9 @@ export default class ListTools {
|
|
|
41
26
|
if (paginatedTools.nextCursor) {
|
|
42
27
|
nextCursor = paginatedTools.nextCursor;
|
|
43
28
|
}
|
|
44
|
-
return Response.toJsonRpc({
|
|
29
|
+
return Response.toJsonRpc({
|
|
30
|
+
id: ctx.request.id,
|
|
31
|
+
result: { tools, nextCursor },
|
|
32
|
+
});
|
|
45
33
|
}
|
|
46
34
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
-
import type { Method } from '../../types/method.js';
|
|
8
7
|
import type { McpContext } from '../../types/context.js';
|
|
8
|
+
import type { Method } from '../../types/method.js';
|
|
9
9
|
export default class Ping implements Method {
|
|
10
|
-
handle(ctx: McpContext): import("../../types/
|
|
10
|
+
handle(ctx: McpContext): import("../../types/jsonrpc.js").JsonRpcResponse;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=ping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/ping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/ping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAInD,MAAM,CAAC,OAAO,OAAO,IAAK,YAAW,MAAM;IACzC,MAAM,CAAC,GAAG,EAAE,UAAU;CAGvB"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
7
|
import type { Method } from '../../types/method.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type { ResourceContext } from '../../types/context.js';
|
|
9
9
|
export default class ReadResource implements Method {
|
|
10
|
-
handle(ctx:
|
|
10
|
+
handle(ctx: ResourceContext): Promise<import("../../types/jsonrpc.js").JsonRpcResponse>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=read_resource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read_resource.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/read_resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"read_resource.d.ts","sourceRoot":"","sources":["../../../../src/server/methods/read_resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQ7D,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,MAAM;IAC3C,MAAM,CAAC,GAAG,EAAE,eAAe;CA4BlC"}
|
|
@@ -4,9 +4,27 @@
|
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
6
|
*/
|
|
7
|
+
import { ErrorCode } from '../../enums/error.js';
|
|
8
|
+
import JsonRpcException from '../exceptions/jsonrpc_exception.js';
|
|
7
9
|
import Response from '../../response.js';
|
|
10
|
+
import { findResource } from '../../utils/find_resource_pattern.js';
|
|
8
11
|
export default class ReadResource {
|
|
9
|
-
handle(ctx) {
|
|
10
|
-
|
|
12
|
+
async handle(ctx) {
|
|
13
|
+
const params = ctx.request.params;
|
|
14
|
+
if (!params?.uri || typeof params.uri !== 'string') {
|
|
15
|
+
throw new JsonRpcException(`The resource URI is required.`, ErrorCode.InvalidParams, ctx.request.id);
|
|
16
|
+
}
|
|
17
|
+
const resource = await findResource({
|
|
18
|
+
uri: params.uri,
|
|
19
|
+
resourceList: ctx.resources,
|
|
20
|
+
ctx,
|
|
21
|
+
});
|
|
22
|
+
const content = await resource.handle(ctx);
|
|
23
|
+
const data = [content];
|
|
24
|
+
const result = { contents: [] };
|
|
25
|
+
data.forEach(async (content) => {
|
|
26
|
+
result.contents.push(await content.toResource(resource));
|
|
27
|
+
});
|
|
28
|
+
return Response.toJsonRpc({ id: ctx.request.id, result });
|
|
11
29
|
}
|
|
12
30
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export declare class CursorPaginator {
|
|
2
|
-
private
|
|
3
|
-
|
|
4
|
-
private cursor?;
|
|
5
|
-
constructor(items: unknown[], perPage: number, cursor?: string | undefined);
|
|
2
|
+
#private;
|
|
3
|
+
constructor(items: unknown[], perPage: number, cursor?: string);
|
|
6
4
|
paginate(key?: string): {
|
|
7
5
|
[key: string]: unknown;
|
|
8
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor_paginator.d.ts","sourceRoot":"","sources":["../../../../src/server/pagination/cursor_paginator.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe
|
|
1
|
+
{"version":3,"file":"cursor_paginator.d.ts","sourceRoot":"","sources":["../../../../src/server/pagination/cursor_paginator.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;;gBAKd,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAMvD,QAAQ,CAAC,GAAG,GAAE,MAAgB,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;IAkBlE,SAAS,CAAC,wBAAwB;IA0BlC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM;CAGtC"}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
export class CursorPaginator {
|
|
2
|
-
items;
|
|
3
|
-
perPage;
|
|
4
|
-
cursor;
|
|
2
|
+
#items;
|
|
3
|
+
#perPage;
|
|
4
|
+
#cursor;
|
|
5
5
|
constructor(items, perPage, cursor) {
|
|
6
|
-
this
|
|
7
|
-
this
|
|
8
|
-
this
|
|
6
|
+
this.#items = items;
|
|
7
|
+
this.#perPage = perPage;
|
|
8
|
+
this.#cursor = cursor;
|
|
9
9
|
}
|
|
10
10
|
paginate(key = 'items') {
|
|
11
11
|
const startOffset = this.getStartOffsetFromCursor();
|
|
12
|
-
const paginatedItems = this
|
|
13
|
-
const hasMorePages = this
|
|
12
|
+
const paginatedItems = this.#items.slice(startOffset, startOffset + this.#perPage);
|
|
13
|
+
const hasMorePages = this.#items.length > startOffset + this.#perPage;
|
|
14
14
|
const result = {
|
|
15
15
|
[key]: paginatedItems,
|
|
16
16
|
};
|
|
17
17
|
if (hasMorePages) {
|
|
18
|
-
result.nextCursor = this.createCursor(startOffset + this
|
|
18
|
+
result.nextCursor = this.createCursor(startOffset + this.#perPage);
|
|
19
19
|
}
|
|
20
20
|
return result;
|
|
21
21
|
}
|
|
22
22
|
getStartOffsetFromCursor() {
|
|
23
|
-
if (!this
|
|
23
|
+
if (!this.#cursor) {
|
|
24
24
|
return 0;
|
|
25
25
|
}
|
|
26
26
|
try {
|
|
27
|
-
const decodedCursor = Buffer.from(this
|
|
27
|
+
const decodedCursor = Buffer.from(this.#cursor, 'base64').toString('utf-8');
|
|
28
28
|
if (!decodedCursor) {
|
|
29
29
|
return 0;
|
|
30
30
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jrmc/adonis-mcp
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
|
|
6
|
+
*/
|
|
7
|
+
import type { JSONSchema } from '../types/method.js';
|
|
8
|
+
import type { Completion } from '../types/jsonrpc.js';
|
|
9
|
+
import type { PromptContext, CompleteContext } from '../types/context.js';
|
|
10
|
+
import type { Content } from './contracts/content.js';
|
|
11
|
+
export declare abstract class Prompt<T extends JSONSchema = JSONSchema> {
|
|
12
|
+
abstract name: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
meta?: Record<string, unknown>;
|
|
16
|
+
schema(): T;
|
|
17
|
+
toJson(): {
|
|
18
|
+
name: string;
|
|
19
|
+
title: string | undefined;
|
|
20
|
+
description: string | undefined;
|
|
21
|
+
inputSchema: T;
|
|
22
|
+
_meta: Record<string, unknown> | undefined;
|
|
23
|
+
};
|
|
24
|
+
abstract handle(ctx?: PromptContext<T>): Promise<Content | Content[]>;
|
|
25
|
+
complete(ctx?: CompleteContext<T>): Promise<Completion>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=prompt.d.ts.map
|