@jrmc/adonis-mcp 1.0.0-beta.1 → 1.0.0-beta.10

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.
Files changed (118) hide show
  1. package/README.md +33 -13
  2. package/build/commands/commands.json +1 -1
  3. package/build/commands/inspector.d.ts +1 -0
  4. package/build/commands/inspector.d.ts.map +1 -1
  5. package/build/commands/inspector.js +1 -0
  6. package/build/commands/make/prompt.d.ts.map +1 -1
  7. package/build/commands/make/prompt.js +4 -1
  8. package/build/commands/make/tool.d.ts.map +1 -1
  9. package/build/commands/make/tool.js +4 -1
  10. package/build/configure.d.ts.map +1 -1
  11. package/build/configure.js +17 -3
  12. package/build/index.d.ts +1 -0
  13. package/build/index.d.ts.map +1 -1
  14. package/build/index.js +1 -0
  15. package/build/providers/mcp_provider.d.ts.map +1 -1
  16. package/build/providers/mcp_provider.js +16 -6
  17. package/build/providers/vinejs_provider.d.ts +13 -0
  18. package/build/providers/vinejs_provider.d.ts.map +1 -0
  19. package/build/providers/vinejs_provider.js +10 -0
  20. package/build/src/request.d.ts +6 -2
  21. package/build/src/request.d.ts.map +1 -1
  22. package/build/src/request.js +6 -2
  23. package/build/src/response.d.ts +1 -1
  24. package/build/src/response.d.ts.map +1 -1
  25. package/build/src/response.js +1 -1
  26. package/build/src/server/annotations/is_destructive.d.ts +1 -1
  27. package/build/src/server/annotations/is_destructive.d.ts.map +1 -1
  28. package/build/src/server/annotations/is_idempotent.d.ts +1 -1
  29. package/build/src/server/annotations/is_idempotent.d.ts.map +1 -1
  30. package/build/src/server/annotations/is_open_world.d.ts +1 -1
  31. package/build/src/server/annotations/is_open_world.d.ts.map +1 -1
  32. package/build/src/server/annotations/is_read_only.d.ts +1 -1
  33. package/build/src/server/annotations/is_read_only.d.ts.map +1 -1
  34. package/build/src/server/contents/embedded_resource.d.ts +2 -1
  35. package/build/src/server/contents/embedded_resource.d.ts.map +1 -1
  36. package/build/src/server/contents/embedded_resource.js +6 -2
  37. package/build/src/server/contents/error.d.ts +5 -0
  38. package/build/src/server/contents/error.d.ts.map +1 -1
  39. package/build/src/server/contents/error.js +10 -1
  40. package/build/src/server/contents/resource_link.d.ts +2 -1
  41. package/build/src/server/contents/resource_link.d.ts.map +1 -1
  42. package/build/src/server/contents/resource_link.js +6 -2
  43. package/build/src/server/context.d.ts +1 -3
  44. package/build/src/server/context.d.ts.map +1 -1
  45. package/build/src/server/context.js +3 -21
  46. package/build/src/server/contracts/context.d.ts +2 -3
  47. package/build/src/server/contracts/context.d.ts.map +1 -1
  48. package/build/src/server/contracts/request.d.ts +12 -0
  49. package/build/src/server/contracts/request.d.ts.map +1 -0
  50. package/build/src/server/contracts/request.js +1 -0
  51. package/build/src/server/contracts/response.d.ts +1 -1
  52. package/build/src/server/contracts/response.d.ts.map +1 -1
  53. package/build/src/server/exceptions/jsonrpc_error.d.ts +7 -0
  54. package/build/src/server/exceptions/jsonrpc_error.d.ts.map +1 -0
  55. package/build/src/server/exceptions/jsonrpc_error.js +10 -0
  56. package/build/src/server/mcp_bouncer.d.ts +115 -0
  57. package/build/src/server/mcp_bouncer.d.ts.map +1 -0
  58. package/build/src/server/mcp_bouncer.js +123 -0
  59. package/build/src/server/methods/call_tool.d.ts +1 -1
  60. package/build/src/server/methods/call_tool.d.ts.map +1 -1
  61. package/build/src/server/methods/call_tool.js +16 -6
  62. package/build/src/server/methods/completion.d.ts +1 -1
  63. package/build/src/server/methods/completion.d.ts.map +1 -1
  64. package/build/src/server/methods/completion.js +9 -8
  65. package/build/src/server/methods/get_prompt.d.ts +1 -1
  66. package/build/src/server/methods/get_prompt.d.ts.map +1 -1
  67. package/build/src/server/methods/get_prompt.js +7 -6
  68. package/build/src/server/methods/list_prompts.d.ts.map +1 -1
  69. package/build/src/server/methods/list_prompts.js +1 -12
  70. package/build/src/server/methods/list_resource_templates.d.ts.map +1 -1
  71. package/build/src/server/methods/list_resource_templates.js +2 -13
  72. package/build/src/server/methods/list_resources.d.ts.map +1 -1
  73. package/build/src/server/methods/list_resources.js +2 -13
  74. package/build/src/server/methods/list_tools.d.ts.map +1 -1
  75. package/build/src/server/methods/list_tools.js +1 -12
  76. package/build/src/server/methods/read_resource.d.ts +1 -1
  77. package/build/src/server/methods/read_resource.d.ts.map +1 -1
  78. package/build/src/server/methods/read_resource.js +15 -6
  79. package/build/src/server/pagination/cursor_paginator.d.ts +6 -4
  80. package/build/src/server/pagination/cursor_paginator.d.ts.map +1 -1
  81. package/build/src/server/pagination/cursor_paginator.js +4 -4
  82. package/build/src/server/prompt.d.ts +3 -2
  83. package/build/src/server/prompt.d.ts.map +1 -1
  84. package/build/src/server/prompt.js +2 -2
  85. package/build/src/server/requests/request_validator.d.ts +15 -0
  86. package/build/src/server/requests/request_validator.d.ts.map +1 -0
  87. package/build/src/server/requests/request_validator.js +25 -0
  88. package/build/src/server/resource.d.ts +2 -2
  89. package/build/src/server/resource.d.ts.map +1 -1
  90. package/build/src/server/resource.js +2 -2
  91. package/build/src/server/tool.d.ts +1 -1
  92. package/build/src/server/tool.d.ts.map +1 -1
  93. package/build/src/server/transports/http_transport.d.ts.map +1 -1
  94. package/build/src/server/transports/http_transport.js +4 -3
  95. package/build/src/server.d.ts +2 -0
  96. package/build/src/server.d.ts.map +1 -1
  97. package/build/src/server.js +9 -3
  98. package/build/src/types/context.d.ts +7 -6
  99. package/build/src/types/context.d.ts.map +1 -1
  100. package/build/src/types/method.d.ts +22 -12
  101. package/build/src/types/method.d.ts.map +1 -1
  102. package/build/src/types/request.d.ts +25 -2
  103. package/build/src/types/request.d.ts.map +1 -1
  104. package/build/src/types/response.d.ts +10 -3
  105. package/build/src/types/response.d.ts.map +1 -1
  106. package/build/src/utils/find_resource_pattern.d.ts +3 -1
  107. package/build/src/utils/find_resource_pattern.d.ts.map +1 -1
  108. package/build/src/utils/find_resource_pattern.js +3 -3
  109. package/build/stubs/config.ts.stub +1 -0
  110. package/build/stubs/main.d.ts.map +1 -1
  111. package/build/stubs/main.js +1 -2
  112. package/build/stubs/make/mcp/prompts/main.ts.stub +2 -2
  113. package/build/stubs/make/mcp/prompts/with_vine.ts.stub +40 -0
  114. package/build/stubs/make/mcp/resources/main.ts.stub +1 -1
  115. package/build/stubs/make/mcp/tools/with_vine.ts.stub +37 -0
  116. package/build/stubs/make/middleware/mcp_middleware.ts.stub +18 -0
  117. package/build/tsconfig.tsbuildinfo +1 -1
  118. package/package.json +21 -8
package/README.md CHANGED
@@ -26,17 +26,17 @@ AdonisJS MCP - Server MCP for your AdonisJS applications.
26
26
  - [x] Inspector
27
27
  - [x] Session
28
28
  - [x] Documentation
29
- - [ ] Output tool
30
- - [ ] Error (review)
31
- - [ ] Vine integration
32
- - [ ] Bounce integration (WIP)
33
- - [ ] Auth helpers (WIP)
34
- - [ ] Inject support
29
+ - [x] Inject support
30
+ - [x] VineJs integration
31
+ - [x] JSON Schema with VineJs
32
+ - [x] Bounce integration
33
+ - [x] Auth helpers
34
+ - [x] Starter kit
35
+ - [x] Demo applications
36
+ - [ ] Events
37
+ - [ ] Logger
35
38
  - [ ] Alternative transports (SSE)
36
- - [ ] JSON Schema with Vine ???
37
- - [ ] Login flow
38
- - [ ] Starter kit
39
- - [ ] Demo applications
39
+ - [ ] Output tool
40
40
 
41
41
  ## Installation & Configuration
42
42
 
@@ -91,7 +91,6 @@ export default class MyToolTool extends Tool<Schema> {
91
91
  description = 'Tool description'
92
92
 
93
93
  async handle({ args, response }: ToolContext<Schema>) {
94
- console.log(args.text)
95
94
  return response.text('Hello, world!')
96
95
  }
97
96
 
@@ -151,6 +150,27 @@ schema() {
151
150
  }
152
151
  ```
153
152
 
153
+ You can also use VineJS(>= [v4](https://vinejs.dev/docs/json-schema-generation)) to define your schema:
154
+
155
+ ```typescript
156
+ import vine from '@vinejs/vine'
157
+
158
+ const vineSchema = vine.object({
159
+ page: vine.number().meta({
160
+ description: 'page number for pagination',
161
+ }),
162
+ perPage: vine.number().optional().meta({
163
+ description: 'per page limit for pagination',
164
+ })
165
+ })
166
+
167
+ schema() {
168
+ return vine.create(
169
+ vineSchema
170
+ ).toJSONSchema() as Schema
171
+ }
172
+ ```
173
+
154
174
  ### Handler Implementation
155
175
 
156
176
  The `handle` method contains your tool's logic. It receives a typed context with validated arguments:
@@ -171,10 +191,10 @@ To use `auth` and `bouncer` in your MCP tools, prompts, and resources, add the f
171
191
  ```typescript
172
192
  declare module '@jrmc/adonis-mcp/types/context' {
173
193
  export interface McpContext {
174
- auth?: {
194
+ auth: {
175
195
  user?: HttpContext['auth']['user']
176
196
  }
177
- bouncer?: Bouncer<
197
+ bouncer: McpBouncer<
178
198
  Exclude<HttpContext['auth']['user'], undefined>,
179
199
  typeof abilities,
180
200
  typeof policies
@@ -1 +1 @@
1
- {"commands":[{"commandName":"mcp:inspector","description":"Open the MCP Inspector tool to debug and test MCP Servers.","help":"","namespace":"mcp","aliases":[],"flags":[],"args":[{"name":"transport","argumentName":"transport","required":true,"description":"Transport type","default":"http","type":"string"}],"options":{"startApp":true},"filePath":"inspector.js"},{"commandName":"make:mcp-prompt","description":"Create a new MCP prompt","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the prompt","type":"string"}],"options":{"startApp":true},"filePath":"make/prompt.js"},{"commandName":"make:mcp-resource","description":"Create a new MCP resource","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the resource","type":"string"}],"options":{"startApp":true},"filePath":"make/resource.js"},{"commandName":"make:mcp-tool","description":"Create a new MCP tool","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the tool","type":"string"}],"options":{"startApp":true},"filePath":"make/tool.js"},{"commandName":"mcp:start","description":"Start the MCP server stdio transport","help":"","namespace":"mcp","aliases":[],"flags":[],"args":[],"options":{"startApp":true},"filePath":"start.js"}],"version":1}
1
+ {"commands":[{"commandName":"mcp:inspector","description":"Open the MCP Inspector tool to debug and test MCP Servers.","help":"","namespace":"mcp","aliases":["mcp:inspect"],"flags":[],"args":[{"name":"transport","argumentName":"transport","required":true,"description":"Transport type","default":"http","type":"string"}],"options":{"startApp":true},"filePath":"inspector.js"},{"commandName":"make:mcp-prompt","description":"Create a new MCP prompt","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the prompt","type":"string"}],"options":{"startApp":true},"filePath":"make/prompt.js"},{"commandName":"make:mcp-resource","description":"Create a new MCP resource","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the resource","type":"string"}],"options":{"startApp":true},"filePath":"make/resource.js"},{"commandName":"make:mcp-tool","description":"Create a new MCP tool","help":"","namespace":"make","aliases":[],"flags":[],"args":[{"name":"name","argumentName":"name","required":true,"description":"Name of the tool","type":"string"}],"options":{"startApp":true},"filePath":"make/tool.js"},{"commandName":"mcp:start","description":"Start the MCP server stdio transport","help":"","namespace":"mcp","aliases":[],"flags":[],"args":[],"options":{"startApp":true},"filePath":"start.js"}],"version":1}
@@ -9,6 +9,7 @@ import { BaseCommand } from '@adonisjs/core/ace';
9
9
  export default class Inspector extends BaseCommand {
10
10
  static commandName: string;
11
11
  static description: string;
12
+ static aliases: string[];
12
13
  static options: CommandOptions;
13
14
  transport: string;
14
15
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../commands/inspector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAAkB;IACpC,MAAM,CAAC,WAAW,SAA+D;IAEjF,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,SAAS,EAAE,MAAM,CAAA;IAEnB,GAAG;CAoCV"}
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../commands/inspector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,SAAkB;IACpC,MAAM,CAAC,WAAW,SAA+D;IACjF,MAAM,CAAC,OAAO,WAAkB;IAEhC,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,SAAS,EAAE,MAAM,CAAA;IAEnB,GAAG;CAoCV"}
@@ -15,6 +15,7 @@ import { args, BaseCommand } from '@adonisjs/core/ace';
15
15
  export default class Inspector extends BaseCommand {
16
16
  static commandName = 'mcp:inspector';
17
17
  static description = 'Open the MCP Inspector tool to debug and test MCP Servers.';
18
+ static aliases = ['mcp:inspect'];
18
19
  static options = {
19
20
  startApp: true,
20
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../commands/make/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAItD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,SAAoB;IACtC,MAAM,CAAC,WAAW,SAA4B;IAE9C,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,IAAI,EAAE,MAAM,CAAA;IAEd,GAAG;CAUV"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../commands/make/prompt.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAItD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW;IACjD,MAAM,CAAC,WAAW,SAAoB;IACtC,MAAM,CAAC,WAAW,SAA4B;IAE9C,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,IAAI,EAAE,MAAM,CAAA;IAEd,GAAG;CAcV"}
@@ -21,7 +21,10 @@ export default class MakePrompt extends BaseCommand {
21
21
  };
22
22
  async run() {
23
23
  const codemods = await this.createCodemods();
24
- const stubPath = `make/mcp/prompts/main.ts.stub`;
24
+ let stubPath = `make/mcp/prompts/main.ts.stub`;
25
+ if (this.app.usingVineJS) {
26
+ stubPath = `make/mcp/prompts/with_vine.ts.stub`;
27
+ }
25
28
  await codemods.makeUsingStub(stubsRoot, stubPath, {
26
29
  name: string.pascalCase(this.name),
27
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../commands/make/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAItD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,WAAW,SAAkB;IACpC,MAAM,CAAC,WAAW,SAA0B;IAE5C,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,IAAI,EAAE,MAAM,CAAA;IAEd,GAAG;CAUV"}
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../commands/make/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAQ,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAItD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW;IAC/C,MAAM,CAAC,WAAW,SAAkB;IACpC,MAAM,CAAC,WAAW,SAA0B;IAE5C,MAAM,CAAC,OAAO,EAAE,cAAc,CAE7B;IAGO,IAAI,EAAE,MAAM,CAAA;IAEd,GAAG;CAcV"}
@@ -21,7 +21,10 @@ export default class MakeTool extends BaseCommand {
21
21
  };
22
22
  async run() {
23
23
  const codemods = await this.createCodemods();
24
- const stubPath = `make/mcp/tools/main.ts.stub`;
24
+ let stubPath = `make/mcp/tools/main.ts.stub`;
25
+ if (this.app.usingVineJS) {
26
+ stubPath = `make/mcp/tools/with_vine.ts.stub`;
27
+ }
25
28
  await codemods.makeUsingStub(stubsRoot, stubPath, {
26
29
  name: string.pascalCase(this.name),
27
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAA;AAG9D,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAuBjD"}
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../configure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAA;AAI9D,wBAAsB,SAAS,CAAC,OAAO,EAAE,SAAS,iBAsCjD"}
@@ -4,9 +4,19 @@
4
4
  * @license MIT
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
+ import { mkdir } from 'node:fs/promises';
7
8
  import { stubsRoot } from './stubs/main.js';
8
9
  export async function configure(command) {
9
10
  const codemods = await command.createCodemods();
11
+ /**
12
+ * Create mcp directory if it doesn't exist
13
+ */
14
+ const mcpDirectory = command.app.rcFile.directories['mcp'] || 'app/mcp/';
15
+ await Promise.all([
16
+ mkdir(command.app.makePath(mcpDirectory, 'tools'), { recursive: true }),
17
+ mkdir(command.app.makePath(mcpDirectory, 'resources'), { recursive: true }),
18
+ mkdir(command.app.makePath(mcpDirectory, 'prompts'), { recursive: true }),
19
+ ]);
10
20
  /**
11
21
  * Create default config file
12
22
  */
@@ -15,14 +25,18 @@ export async function configure(command) {
15
25
  * Create and configuredefault middleware file
16
26
  */
17
27
  await codemods.makeUsingStub(stubsRoot, 'make/middleware/mcp_middleware.ts.stub', {});
18
- await codemods.registerMiddleware('router', [
19
- { path: '#middleware/mcp_middleware', position: 'after' },
28
+ await codemods.registerMiddleware('named', [
29
+ { name: 'mcp', path: '#middleware/mcp_middleware', position: 'after' },
20
30
  ]);
31
+ const useVine = await command.prompt.toggle('Is Vinejs used for validation?', ['Yes', 'No']);
21
32
  /**
22
33
  * Register provider
23
34
  */
24
35
  await codemods.updateRcFile((rcFile) => {
25
- rcFile.addProvider('@jrmc/adonis-mcp/mcp_provider');
26
36
  rcFile.addCommand('@jrmc/adonis-mcp/commands');
37
+ rcFile.addProvider('@jrmc/adonis-mcp/mcp_provider');
38
+ if (useVine) {
39
+ rcFile.addProvider('@jrmc/adonis-mcp/vinejs_provider');
40
+ }
27
41
  });
28
42
  }
package/build/index.d.ts CHANGED
@@ -3,5 +3,6 @@ export { Tool } from './src/server/tool.js';
3
3
  export { Resource } from './src/server/resource.js';
4
4
  export { Prompt } from './src/server/prompt.js';
5
5
  export * as McpResponse from './src/response.js';
6
+ export { default as McpBouncer } from './src/server/mcp_bouncer.js';
6
7
  export { defineConfig } from './src/define_config.js';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA"}
package/build/index.js CHANGED
@@ -3,4 +3,5 @@ export { Tool } from './src/server/tool.js';
3
3
  export { Resource } from './src/server/resource.js';
4
4
  export { Prompt } from './src/server/prompt.js';
5
5
  export * as McpResponse from './src/response.js';
6
+ export { default as McpBouncer } from './src/server/mcp_bouncer.js';
6
7
  export { defineConfig } from './src/define_config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"mcp_provider.d.ts","sourceRoot":"","sources":["../../providers/mcp_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAKrD,OAAO,SAAS,MAAM,kBAAkB,CAAA;AAExC,MAAM,CAAC,OAAO,OAAO,WAAW;IAClB,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;IAQF,KAAK;IAeL,aAAa;IAIb,iBAAiB;IAIjB,eAAe;IAIf,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ;CAoC3D;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,MAAM;QACd,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,UAAU,CAAA;KACtC;CACF;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,iBAAiB;QACzB,UAAU,EAAE,SAAS,CAAA;KACtB;CACF"}
1
+ {"version":3,"file":"mcp_provider.d.ts","sourceRoot":"","sources":["../../providers/mcp_provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAMrD,OAAO,SAAS,MAAM,kBAAkB,CAAA;AAExC,MAAM,CAAC,OAAO,OAAO,WAAW;IAClB,SAAS,CAAC,GAAG,EAAE,kBAAkB;gBAAvB,GAAG,EAAE,kBAAkB;IAE7C,QAAQ;IAQF,KAAK;IAeL,aAAa;IAIb,iBAAiB;IAIjB,eAAe;IAIf,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ;CA6C3D;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,MAAM;QACd,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,UAAU,CAAA;KACtC;CACF;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,iBAAiB;QACzB,UAAU,EAAE,SAAS,CAAA;KACtB;CACF"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { fsReadAll } from '@adonisjs/core/helpers';
8
8
  import string from '@adonisjs/core/helpers/string';
9
+ import { UriTemplate } from '../src/utils/uri_template.js';
9
10
  import McpServer from '../src/server.js';
10
11
  export default class McpProvider {
11
12
  app;
@@ -43,26 +44,35 @@ export default class McpProvider {
43
44
  const server = await this.app.container.make('jrmc.mcp');
44
45
  const mcpPath = this.app.makePath(this.app.rcFile.directories['mcp'] || 'app/mcp/', `${string.plural(type)}/`);
45
46
  const files = await fsReadAll(mcpPath, {
46
- filter: (filePath) => filePath.includes(`_${type}.ts`),
47
+ filter: (filePath) => !filePath.endsWith('.map') &&
48
+ (filePath.includes(`_${type}.ts`) || filePath.includes(`_${type}.js`)),
47
49
  });
48
50
  await Promise.all(files.map(async (file) => {
49
51
  const path = this.app.makePath(mcpPath, file);
50
52
  const { default: Method } = await import(path);
51
53
  const instance = new Method();
54
+ const entry = { path, json: instance.toJson() };
52
55
  switch (type) {
53
56
  case 'tool':
54
57
  server.addTool({
55
- [instance.name]: path,
58
+ [instance.name]: entry,
56
59
  });
57
60
  break;
58
61
  case 'resource':
59
- server.addResource({
60
- [instance.uri]: path,
61
- });
62
+ if (UriTemplate.isTemplate(instance.uri)) {
63
+ server.addResourceTemplate({
64
+ [instance.uri]: entry,
65
+ });
66
+ }
67
+ else {
68
+ server.addResource({
69
+ [instance.uri]: entry,
70
+ });
71
+ }
62
72
  break;
63
73
  case 'prompt':
64
74
  server.addPrompt({
65
- [instance.name]: path,
75
+ [instance.name]: entry,
66
76
  });
67
77
  break;
68
78
  }
@@ -0,0 +1,13 @@
1
+ import { RequestValidator } from '../src/server/requests/request_validator.js';
2
+ export default class VineJSServiceProvider {
3
+ boot(): void;
4
+ }
5
+ declare module '../src/types/request.js' {
6
+ interface McpResourceRequest extends RequestValidator {
7
+ }
8
+ interface McpToolRequest extends RequestValidator {
9
+ }
10
+ interface McpPromptRequest extends RequestValidator {
11
+ }
12
+ }
13
+ //# sourceMappingURL=vinejs_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vinejs_provider.d.ts","sourceRoot":"","sources":["../../providers/vinejs_provider.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAA;AAE9E,MAAM,CAAC,OAAO,OAAO,qBAAqB;IACxC,IAAI;CAQL;AAED,OAAO,QAAQ,yBAAyB,CAAC;IACvC,UAAU,kBAAmB,SAAQ,gBAAgB;KAAG;IACxD,UAAU,cAAe,SAAQ,gBAAgB;KAAG;IACpD,UAAU,gBAAiB,SAAQ,gBAAgB;KAAG;CACvD"}
@@ -0,0 +1,10 @@
1
+ import McpRequest from '../src/request.js';
2
+ import { RequestValidator } from '../src/server/requests/request_validator.js';
3
+ export default class VineJSServiceProvider {
4
+ boot() {
5
+ ;
6
+ McpRequest.macro('validateUsing', function (validator, options) {
7
+ return new RequestValidator(this.ctx).validateUsing(validator, options);
8
+ });
9
+ }
10
+ }
@@ -5,7 +5,11 @@
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
7
  import type { JsonRpcRequest } from './types/jsonrpc.js';
8
- export default class Request implements JsonRpcRequest {
8
+ import type { Request } from './server/contracts/request.js';
9
+ import type { Context } from './server/contracts/context.js';
10
+ import Macroable from '@poppinss/macroable';
11
+ export default class McpRequest extends Macroable implements Request {
12
+ ctx: Context;
9
13
  jsonrpc: '2.0';
10
14
  id: string | number;
11
15
  method: string;
@@ -13,6 +17,6 @@ export default class Request implements JsonRpcRequest {
13
17
  cursor?: string;
14
18
  [key: string]: unknown;
15
19
  };
16
- constructor(request: JsonRpcRequest);
20
+ constructor(ctx: Context, request: JsonRpcRequest);
17
21
  }
18
22
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,cAAc;IACpD,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;gBAEW,OAAO,EAAE,cAAc;CAMpC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAA;AAE5D,OAAO,SAAS,MAAM,qBAAqB,CAAA;AAE3C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAU,YAAW,OAAO;IAClE,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;gBAEW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc;CAQlD"}
@@ -1,9 +1,13 @@
1
- export default class Request {
1
+ import Macroable from '@poppinss/macroable';
2
+ export default class McpRequest extends Macroable {
3
+ ctx;
2
4
  jsonrpc;
3
5
  id;
4
6
  method;
5
7
  params;
6
- constructor(request) {
8
+ constructor(ctx, request) {
9
+ super();
10
+ this.ctx = ctx;
7
11
  this.jsonrpc = request.jsonrpc;
8
12
  this.id = request.id;
9
13
  this.method = request.method;
@@ -26,7 +26,7 @@ export default class<T extends McpRequestType = McpRequestType> implements Respo
26
26
  structured(object: Record<string, unknown>): Structured;
27
27
  resourceLink(uri: string): ResourceLink;
28
28
  embeddedResource(uri: string): EmbeddedResource;
29
- error(message: string): Error;
29
+ error(message?: string): Error;
30
30
  complete(completion: Completion): Completion;
31
31
  static toJsonRpc({ id, result, error }: Omit<JsonRpcResponse, 'jsonrpc'>): JsonRpcResponse;
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAC9C,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAC9C,OAAO,UAAU,MAAM,iCAAiC,CAAA;AACxD,OAAO,YAAY,MAAM,oCAAoC,CAAA;AAC7D,OAAO,gBAAgB,MAAM,wCAAwC,CAAA;AACrE,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAE9C,MAAM,CAAC,OAAO,OAAO,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,YAAW,QAAQ;IACjF,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;gBAEJ,cAAc,EAAE,cAAc;IAc1C,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAIpC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAIpC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1C,YAAY,CAAC,GAAG,EAAE,MAAM;IAIxB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM;IAIrB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAI/B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,eAAe;CAQ3F"}
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/response.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAC9C,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAC9C,OAAO,UAAU,MAAM,iCAAiC,CAAA;AACxD,OAAO,YAAY,MAAM,oCAAoC,CAAA;AAC7D,OAAO,gBAAgB,MAAM,wCAAwC,CAAA;AACrE,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAE9C,MAAM,CAAC,OAAO,OAAO,CAAC,SAAS,cAAc,GAAG,cAAc,CAAE,YAAW,QAAQ;IACjF,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;gBAEJ,cAAc,EAAE,cAAc;IAc1C,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAIpC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAIpC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1C,YAAY,CAAC,GAAG,EAAE,MAAM;IAIxB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAI5B,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM;IAItB,QAAQ,CAAC,UAAU,EAAE,UAAU;IAI/B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,eAAe;CAQ3F"}
@@ -21,7 +21,7 @@ export default class {
21
21
  else if (jsonRpcRequest.method === 'prompts/get') {
22
22
  this.type = 'prompts/get';
23
23
  }
24
- else if (jsonRpcRequest.method === 'prompts/get') {
24
+ else if (jsonRpcRequest.method === 'tools/call') {
25
25
  this.type = 'tools/call';
26
26
  }
27
27
  else if (jsonRpcRequest.method === 'completion/complete') {
@@ -5,7 +5,7 @@
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
7
  import type { ToolAnnotations } from '../../types/jsonrpc.js';
8
- export declare function isDestructive(destructive?: true | false): <T extends {
8
+ export declare function isDestructive(destructive?: boolean): <T extends {
9
9
  new (...args: any[]): {
10
10
  annotations?: ToolAnnotations;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is_destructive.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_destructive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,aAAa,CAAC,WAAW,GAAE,IAAI,GAAG,KAAY,IAC3C,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
1
+ {"version":3,"file":"is_destructive.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_destructive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,aAAa,CAAC,WAAW,GAAE,OAAc,IACtC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
@@ -5,7 +5,7 @@
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
7
  import type { ToolAnnotations } from '../../types/jsonrpc.js';
8
- export declare function isIdempotent(idempotent?: true | false): <T extends {
8
+ export declare function isIdempotent(idempotent?: boolean): <T extends {
9
9
  new (...args: any[]): {
10
10
  annotations?: ToolAnnotations;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is_idempotent.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_idempotent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,YAAY,CAAC,UAAU,GAAE,IAAI,GAAG,KAAY,IACzC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
1
+ {"version":3,"file":"is_idempotent.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_idempotent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,YAAY,CAAC,UAAU,GAAE,OAAc,IACpC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
@@ -5,7 +5,7 @@
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
7
  import type { ToolAnnotations } from '../../types/jsonrpc.js';
8
- export declare function isOpenWorld(openWorld?: true | false): <T extends {
8
+ export declare function isOpenWorld(openWorld?: boolean): <T extends {
9
9
  new (...args: any[]): {
10
10
  annotations?: ToolAnnotations;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is_open_world.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_open_world.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,WAAW,CAAC,SAAS,GAAE,IAAI,GAAG,KAAY,IACvC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
1
+ {"version":3,"file":"is_open_world.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_open_world.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,WAAW,CAAC,SAAS,GAAE,OAAc,IAClC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
@@ -5,7 +5,7 @@
5
5
  * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr>
6
6
  */
7
7
  import type { ToolAnnotations } from '../../types/jsonrpc.js';
8
- export declare function isReadOnly(readonly?: true | false): <T extends {
8
+ export declare function isReadOnly(readonly?: boolean): <T extends {
9
9
  new (...args: any[]): {
10
10
  annotations?: ToolAnnotations;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is_read_only.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_read_only.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,UAAU,CAAC,QAAQ,GAAE,IAAI,GAAG,KAAY,IACrC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
1
+ {"version":3,"file":"is_read_only.d.ts","sourceRoot":"","sources":["../../../../src/server/annotations/is_read_only.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,wBAAgB,UAAU,CAAC,QAAQ,GAAE,OAAc,IAChC,CAAC,SAAS;IAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG;QAAE,WAAW,CAAC,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,EACpF,aAAa,CAAC;kBAGS,GAAG,EAAE;sBAJqC,eAAe;;MAmBnF"}
@@ -12,7 +12,8 @@ import type { Resource } from '../resource.js';
12
12
  import type { ResourceContext } from '../../types/context.js';
13
13
  export default class EmbeddedResource implements Content {
14
14
  #private;
15
- constructor(uri: string);
15
+ private app;
16
+ constructor(uri: string, app?: import("@adonisjs/core/types").ApplicationService);
16
17
  preProcess(ctx: ResourceContext): Promise<this>;
17
18
  toTool(_tool: Tool): Promise<EmbeddedResourceContent>;
18
19
  toPrompt(_prompt: Prompt): Promise<EmbeddedResourceContent>;
@@ -1 +1 @@
1
- {"version":3,"file":"embedded_resource.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/embedded_resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,OAAO;;gBAQ1C,GAAG,EAAE,MAAM;IAKjB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAYrD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY3D,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAOrD,WAAW,IAAI,IAAI;IAKnB,MAAM,IAAI,IAAI;IAKd,IAAI,IAAI,yBAEP;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAY9C"}
1
+ {"version":3,"file":"embedded_resource.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/embedded_resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAO7D,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,OAAO;;IAUpD,OAAO,CAAC,GAAG;gBADX,GAAG,EAAE,MAAM,EACH,GAAG,oDAAqB;IAM5B,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAa/C,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAYrD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY3D,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAOrD,WAAW,IAAI,IAAI;IAKnB,MAAM,IAAI,IAAI;IAKd,IAAI,IAAI,yBAEP;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAY9C"}
@@ -6,21 +6,25 @@
6
6
  */
7
7
  import { createError } from '@adonisjs/core/exceptions';
8
8
  import { findResource } from '../../utils/find_resource_pattern.js';
9
+ import applicationService from '@adonisjs/core/services/app';
9
10
  export default class EmbeddedResource {
11
+ app;
10
12
  #uri;
11
13
  #resource;
12
14
  #role;
13
15
  #meta;
14
16
  #ctx;
15
- constructor(uri) {
17
+ constructor(uri, app = applicationService) {
18
+ this.app = app;
16
19
  this.#uri = uri;
17
20
  this.#role = 'user';
18
21
  }
19
22
  async preProcess(ctx) {
20
23
  this.#ctx = ctx;
21
24
  this.#resource = await findResource({
25
+ app: this.app,
22
26
  uri: this.#uri,
23
- resourceList: ctx.resources,
27
+ resourceList: { ...ctx.resources, ...ctx.resourceTemplates },
24
28
  ctx,
25
29
  });
26
30
  return this;
@@ -6,9 +6,14 @@
6
6
  */
7
7
  import type { Content } from '../contracts/content.js';
8
8
  import type { Prompt } from '../prompt.js';
9
+ import type { Tool } from '../tool.js';
9
10
  import type { Resource } from '../resource.js';
11
+ import type { TextContent } from '../../types/jsonrpc.js';
10
12
  import Text from './text.js';
11
13
  export default class Error extends Text implements Content {
14
+ #private;
15
+ constructor(text?: string);
16
+ toTool(tool: Tool): Promise<TextContent>;
12
17
  toPrompt(_prompt: Prompt): never;
13
18
  toResource(_resource: Resource): never;
14
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,IAAK,YAAW,OAAO;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;IAIhC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,KAAK;CAGvC"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/error.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,IAAK,YAAW,OAAO;;gBAG5C,IAAI,CAAC,EAAE,MAAM;IAKnB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IAK9C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK;IAIhC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,KAAK;CAGvC"}
@@ -7,10 +7,19 @@
7
7
  import Text from './text.js';
8
8
  import { createError } from '@adonisjs/core/exceptions';
9
9
  export default class Error extends Text {
10
+ #text;
11
+ constructor(text) {
12
+ super(text);
13
+ this.#text = text;
14
+ }
15
+ async toTool(tool) {
16
+ this.#text = this.#text || 'An error occurred';
17
+ return super.toTool(tool);
18
+ }
10
19
  toPrompt(_prompt) {
11
20
  throw createError('Error content may not be used in prompts.', 'E_ERROR_NOT_SUPPORTED');
12
21
  }
13
22
  toResource(_resource) {
14
- throw createError('Error content may not be used in resources.', 'E_ERROR_NOT_SUPPORTED');
23
+ throw createError(this.#text || 'Resource not found', 'E_ERROR_NOT_FOUND');
15
24
  }
16
25
  }
@@ -12,7 +12,8 @@ import type { Resource } from '../resource.js';
12
12
  import type { ResourceContext } from '../../types/context.js';
13
13
  export default class ResourceLink implements Content {
14
14
  #private;
15
- constructor(uri: string);
15
+ private app;
16
+ constructor(uri: string, app?: import("@adonisjs/core/types").ApplicationService);
16
17
  preProcess(ctx: ResourceContext): Promise<this>;
17
18
  toTool(_tool: Tool): Promise<ResourceLinkContent>;
18
19
  toPrompt(_prompt: Prompt): Promise<never>;
@@ -1 +1 @@
1
- {"version":3,"file":"resource_link.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/resource_link.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAK7D,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,OAAO;;gBAKtC,GAAG,EAAE,MAAM;IAKjB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBjD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAOzC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAOrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAY9C"}
1
+ {"version":3,"file":"resource_link.d.ts","sourceRoot":"","sources":["../../../../src/server/contents/resource_link.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAO7D,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,OAAO;;IAOhD,OAAO,CAAC,GAAG;gBADX,GAAG,EAAE,MAAM,EACH,GAAG,oDAAqB;IAM5B,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBjD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAOzC,UAAU,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAOrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAY9C"}
@@ -6,18 +6,22 @@
6
6
  */
7
7
  import { createError } from '@adonisjs/core/exceptions';
8
8
  import { findResource } from '../../utils/find_resource_pattern.js';
9
+ import applicationService from '@adonisjs/core/services/app';
9
10
  export default class ResourceLink {
11
+ app;
10
12
  #uri;
11
13
  #resource;
12
14
  #meta;
13
- constructor(uri) {
15
+ constructor(uri, app = applicationService) {
16
+ this.app = app;
14
17
  this.#uri = uri;
15
18
  this.#resource = null;
16
19
  }
17
20
  async preProcess(ctx) {
18
21
  this.#resource = await findResource({
22
+ app: this.app,
19
23
  uri: this.#uri,
20
- resourceList: ctx.resources,
24
+ resourceList: { ...ctx.resources, ...ctx.resourceTemplates },
21
25
  ctx,
22
26
  });
23
27
  return this;
@@ -10,7 +10,6 @@ import type { ServerContextOptions } from '../types/context.js';
10
10
  import type { ToolList, ResourceList, PromptList } from '../types/method.js';
11
11
  import type { McpRequest, McpRequestType } from '../types/request.js';
12
12
  export default class ServerContext implements Context {
13
- #private;
14
13
  readonly requestMethod: McpRequestType;
15
14
  supportedProtocolVersions: string[];
16
15
  serverCapabilities: Record<string, any>;
@@ -21,12 +20,11 @@ export default class ServerContext implements Context {
21
20
  defaultPaginationLength: number;
22
21
  tools: ToolList;
23
22
  resources: ResourceList;
23
+ resourceTemplates: ResourceList;
24
24
  prompts: PromptList;
25
25
  request: McpRequest<this['requestMethod']>;
26
26
  response: McpResponse<this['requestMethod']>;
27
27
  constructor(options: ServerContextOptions);
28
28
  getPerPage(requestedPerPage?: number): number;
29
- getResources(): Promise<ResourceList>;
30
- getResourceTemplates(): Promise<ResourceList>;
31
29
  }
32
30
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAMrE,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,OAAO;;IACnD,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAA;IAEtC,yBAAyB,EAAE,MAAM,EAAE,CAAA;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,KAAK,EAAE,QAAQ,CAAA;IACf,SAAS,EAAE,YAAY,CAAA;IACvB,OAAO,EAAE,UAAU,CAAA;IACnB,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;IAC1C,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;gBAEhC,OAAO,EAAE,oBAAoB;IAoBzC,UAAU,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAIrC,oBAAoB,IAAI,OAAO,CAAC,YAAY,CAAC;CA2BpD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/server/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAKrE,MAAM,CAAC,OAAO,OAAO,aAAc,YAAW,OAAO;IACnD,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAA;IAEtC,yBAAyB,EAAE,MAAM,EAAE,CAAA;IACnC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,KAAK,EAAE,QAAQ,CAAA;IACf,SAAS,EAAE,YAAY,CAAA;IACvB,iBAAiB,EAAE,YAAY,CAAA;IAC/B,OAAO,EAAE,UAAU,CAAA;IACnB,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;IAC1C,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;gBAEhC,OAAO,EAAE,oBAAoB;IAuBzC,UAAU,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM;CAG9C"}