@reverso/mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +64 -0
  2. package/dist/bin.d.ts +10 -0
  3. package/dist/bin.d.ts.map +1 -0
  4. package/dist/bin.js +87 -0
  5. package/dist/bin.js.map +1 -0
  6. package/dist/index.d.ts +38 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +39 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/server.d.ts +51 -0
  11. package/dist/server.d.ts.map +1 -0
  12. package/dist/server.js +193 -0
  13. package/dist/server.js.map +1 -0
  14. package/dist/tools/content.d.ts +177 -0
  15. package/dist/tools/content.d.ts.map +1 -0
  16. package/dist/tools/content.js +143 -0
  17. package/dist/tools/content.js.map +1 -0
  18. package/dist/tools/forms.d.ts +197 -0
  19. package/dist/tools/forms.d.ts.map +1 -0
  20. package/dist/tools/forms.js +132 -0
  21. package/dist/tools/forms.js.map +1 -0
  22. package/dist/tools/generation.d.ts +98 -0
  23. package/dist/tools/generation.d.ts.map +1 -0
  24. package/dist/tools/generation.js +213 -0
  25. package/dist/tools/generation.js.map +1 -0
  26. package/dist/tools/index.d.ts +9 -0
  27. package/dist/tools/index.d.ts.map +1 -0
  28. package/dist/tools/index.js +9 -0
  29. package/dist/tools/index.js.map +1 -0
  30. package/dist/tools/media.d.ts +160 -0
  31. package/dist/tools/media.d.ts.map +1 -0
  32. package/dist/tools/media.js +143 -0
  33. package/dist/tools/media.js.map +1 -0
  34. package/dist/tools/schema.d.ts +86 -0
  35. package/dist/tools/schema.d.ts.map +1 -0
  36. package/dist/tools/schema.js +263 -0
  37. package/dist/tools/schema.js.map +1 -0
  38. package/dist/types.d.ts +39 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +5 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +65 -0
package/README.md ADDED
@@ -0,0 +1,64 @@
1
+ # @reverso/mcp
2
+
3
+ MCP Server for AI integration with Reverso CMS.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @reverso/mcp
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ Start the MCP server:
14
+
15
+ ```bash
16
+ reverso-mcp --database ./data/reverso.db
17
+ ```
18
+
19
+ ### Claude Desktop Configuration
20
+
21
+ Add to `claude_desktop_config.json`:
22
+
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "reverso": {
27
+ "command": "npx",
28
+ "args": ["@reverso/mcp", "--database", "/path/to/reverso.db"]
29
+ }
30
+ }
31
+ }
32
+ ```
33
+
34
+ ## Available Tools
35
+
36
+ ### Content Management
37
+ - `list_pages` - List all pages
38
+ - `get_page` - Get page details
39
+ - `get_content` - Get content by path
40
+ - `update_content` - Update content
41
+ - `publish_content` / `unpublish_content`
42
+
43
+ ### Schema
44
+ - `get_schema` - Get full schema
45
+ - `get_fields` - Get fields for a page
46
+ - `suggest_field_type` - AI field type suggestion
47
+
48
+ ### Media
49
+ - `list_media` - Browse media library
50
+ - `search_media` - Search files
51
+ - `get_media_stats` - Library statistics
52
+
53
+ ### Forms
54
+ - `list_forms` - List all forms
55
+ - `get_form` - Get form details
56
+ - `list_submissions` - View submissions
57
+
58
+ ## Documentation
59
+
60
+ See [https://reverso.dev/docs/packages/mcp](https://reverso.dev/docs/packages/mcp)
61
+
62
+ ## License
63
+
64
+ MIT
package/dist/bin.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Reverso MCP Server CLI entry point.
4
+ *
5
+ * Usage:
6
+ * reverso-mcp --database .reverso/dev.db
7
+ * reverso-mcp -d /path/to/database.db
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
package/dist/bin.js ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Reverso MCP Server CLI entry point.
4
+ *
5
+ * Usage:
6
+ * reverso-mcp --database .reverso/dev.db
7
+ * reverso-mcp -d /path/to/database.db
8
+ */
9
+ import { resolve } from 'node:path';
10
+ import { startMcpServer } from './server.js';
11
+ import { VERSION } from './index.js';
12
+ function parseArgs(args) {
13
+ const result = {
14
+ database: '.reverso/dev.db',
15
+ help: false,
16
+ version: false,
17
+ };
18
+ for (let i = 0; i < args.length; i++) {
19
+ const arg = args[i];
20
+ if (arg === '--help' || arg === '-h') {
21
+ result.help = true;
22
+ }
23
+ else if (arg === '--version' || arg === '-v') {
24
+ result.version = true;
25
+ }
26
+ else if (arg === '--database' || arg === '-d') {
27
+ result.database = args[++i] ?? result.database;
28
+ }
29
+ }
30
+ return result;
31
+ }
32
+ function printHelp() {
33
+ console.info(`
34
+ Reverso MCP Server - AI integration for Reverso CMS
35
+
36
+ Usage:
37
+ reverso-mcp [options]
38
+
39
+ Options:
40
+ -d, --database <path> Database file path (default: .reverso/dev.db)
41
+ -h, --help Show this help message
42
+ -v, --version Show version number
43
+
44
+ Examples:
45
+ reverso-mcp
46
+ reverso-mcp --database ./data/cms.db
47
+ reverso-mcp -d /path/to/project/.reverso/dev.db
48
+
49
+ MCP Configuration:
50
+ Add to your Claude Desktop config (claude_desktop_config.json):
51
+
52
+ {
53
+ "mcpServers": {
54
+ "reverso": {
55
+ "command": "npx",
56
+ "args": ["reverso-mcp", "-d", "/path/to/your/.reverso/dev.db"]
57
+ }
58
+ }
59
+ }
60
+ `);
61
+ }
62
+ function printVersion() {
63
+ console.info(`reverso-mcp v${VERSION}`);
64
+ }
65
+ async function main() {
66
+ const args = parseArgs(process.argv.slice(2));
67
+ if (args.help) {
68
+ printHelp();
69
+ process.exit(0);
70
+ }
71
+ if (args.version) {
72
+ printVersion();
73
+ process.exit(0);
74
+ }
75
+ const databasePath = resolve(args.database);
76
+ // Start the MCP server
77
+ await startMcpServer({
78
+ databasePath,
79
+ name: 'reverso-mcp',
80
+ version: VERSION,
81
+ });
82
+ }
83
+ main().catch((error) => {
84
+ console.error('Failed to start MCP server:', error);
85
+ process.exit(1);
86
+ });
87
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,MAAM,GAAG;QACb,QAAQ,EAAE,iBAAiB;QAC3B,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bd,CAAC,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5C,uBAAuB;IACvB,MAAM,cAAc,CAAC;QACnB,YAAY;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @reverso/mcp
3
+ *
4
+ * MCP Server for AI integration with Reverso CMS.
5
+ * Allows AI assistants to interact with CMS content via Model Context Protocol.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createMcpServer, startMcpServer } from '@reverso/mcp';
10
+ *
11
+ * // Start the server
12
+ * await startMcpServer({
13
+ * databasePath: '.reverso/dev.db',
14
+ * });
15
+ * ```
16
+ *
17
+ * @example
18
+ * Add to Claude Desktop config (claude_desktop_config.json):
19
+ * ```json
20
+ * {
21
+ * "mcpServers": {
22
+ * "reverso": {
23
+ * "command": "npx",
24
+ * "args": ["reverso-mcp", "-d", "/path/to/.reverso/dev.db"]
25
+ * }
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export declare const VERSION = "0.0.0";
31
+ export { ReversoMcpServer, createMcpServer, startMcpServer } from './server.js';
32
+ export { contentTools } from './tools/content.js';
33
+ export { schemaTools } from './tools/schema.js';
34
+ export { mediaTools } from './tools/media.js';
35
+ export { formsTools } from './tools/forms.js';
36
+ export { generationTools } from './tools/generation.js';
37
+ export type { McpServerConfig, ContentUpdateInput, ContentGenerationInput, FieldTypeSuggestion, ContentAnalysis } from './types.js';
38
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @reverso/mcp
3
+ *
4
+ * MCP Server for AI integration with Reverso CMS.
5
+ * Allows AI assistants to interact with CMS content via Model Context Protocol.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createMcpServer, startMcpServer } from '@reverso/mcp';
10
+ *
11
+ * // Start the server
12
+ * await startMcpServer({
13
+ * databasePath: '.reverso/dev.db',
14
+ * });
15
+ * ```
16
+ *
17
+ * @example
18
+ * Add to Claude Desktop config (claude_desktop_config.json):
19
+ * ```json
20
+ * {
21
+ * "mcpServers": {
22
+ * "reverso": {
23
+ * "command": "npx",
24
+ * "args": ["reverso-mcp", "-d", "/path/to/.reverso/dev.db"]
25
+ * }
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export const VERSION = '0.0.0';
31
+ // Server exports
32
+ export { ReversoMcpServer, createMcpServer, startMcpServer } from './server.js';
33
+ // Tool exports
34
+ export { contentTools } from './tools/content.js';
35
+ export { schemaTools } from './tools/schema.js';
36
+ export { mediaTools } from './tools/media.js';
37
+ export { formsTools } from './tools/forms.js';
38
+ export { generationTools } from './tools/generation.js';
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,iBAAiB;AACjB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhF,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Reverso MCP Server
3
+ *
4
+ * Provides AI assistants with tools to interact with Reverso CMS content.
5
+ */
6
+ import type { McpServerConfig } from './types.js';
7
+ export declare class ReversoMcpServer {
8
+ private server;
9
+ private db;
10
+ private config;
11
+ private isAuthenticated;
12
+ constructor(config: McpServerConfig);
13
+ /**
14
+ * Validate that the server is authenticated.
15
+ * Throws if auth is required but not provided.
16
+ */
17
+ private validateAuth;
18
+ /**
19
+ * Register all tools with the MCP server.
20
+ */
21
+ private registerTools;
22
+ /**
23
+ * Register a group of tools.
24
+ */
25
+ private registerToolGroup;
26
+ /**
27
+ * Register resources with the MCP server.
28
+ */
29
+ private registerResources;
30
+ /**
31
+ * Get or create database connection.
32
+ */
33
+ private getDatabase;
34
+ /**
35
+ * Start the MCP server with stdio transport.
36
+ */
37
+ start(): Promise<void>;
38
+ /**
39
+ * Close the server and database connection.
40
+ */
41
+ close(): Promise<void>;
42
+ }
43
+ /**
44
+ * Create and start a Reverso MCP server.
45
+ */
46
+ export declare function createMcpServer(config: McpServerConfig): Promise<ReversoMcpServer>;
47
+ /**
48
+ * Start the MCP server with the given configuration.
49
+ */
50
+ export declare function startMcpServer(config: McpServerConfig): Promise<void>;
51
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,EAAE,CAAgC;IAC1C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,EAAE,eAAe;IAwBnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgDzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;YACW,WAAW;IAOzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGxF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E"}
package/dist/server.js ADDED
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Reverso MCP Server
3
+ *
4
+ * Provides AI assistants with tools to interact with Reverso CMS content.
5
+ */
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { z } from 'zod';
9
+ import { createDatabase } from '@reverso/db';
10
+ import { contentTools } from './tools/content.js';
11
+ import { schemaTools } from './tools/schema.js';
12
+ import { mediaTools } from './tools/media.js';
13
+ import { formsTools } from './tools/forms.js';
14
+ import { generationTools } from './tools/generation.js';
15
+ export class ReversoMcpServer {
16
+ server;
17
+ db = null;
18
+ config;
19
+ isAuthenticated = false;
20
+ constructor(config) {
21
+ this.config = config;
22
+ // Validate API key if authentication is enabled
23
+ const apiKey = config.apiKey || process.env.REVERSO_MCP_API_KEY;
24
+ const authEnabled = config.authEnabled ?? !!apiKey;
25
+ if (authEnabled && !apiKey) {
26
+ console.error('[MCP] Warning: Authentication enabled but no API key provided.');
27
+ console.error('[MCP] Set REVERSO_MCP_API_KEY environment variable or pass apiKey in config.');
28
+ }
29
+ // In production-like environments, authentication is validated at startup
30
+ this.isAuthenticated = !authEnabled || !!apiKey;
31
+ this.server = new McpServer({
32
+ name: config.name ?? 'reverso-mcp',
33
+ version: config.version ?? '0.0.0',
34
+ });
35
+ this.registerTools();
36
+ this.registerResources();
37
+ }
38
+ /**
39
+ * Validate that the server is authenticated.
40
+ * Throws if auth is required but not provided.
41
+ */
42
+ validateAuth() {
43
+ if (!this.isAuthenticated) {
44
+ throw new Error('MCP Server requires authentication. Set REVERSO_MCP_API_KEY environment variable.');
45
+ }
46
+ }
47
+ /**
48
+ * Register all tools with the MCP server.
49
+ */
50
+ registerTools() {
51
+ // Content tools
52
+ this.registerToolGroup(contentTools, 'content');
53
+ // Schema tools
54
+ this.registerToolGroup(schemaTools, 'schema');
55
+ // Media tools
56
+ this.registerToolGroup(mediaTools, 'media');
57
+ // Forms tools
58
+ this.registerToolGroup(formsTools, 'forms');
59
+ // Generation tools
60
+ this.registerToolGroup(generationTools, 'ai');
61
+ }
62
+ /**
63
+ * Register a group of tools.
64
+ */
65
+ registerToolGroup(
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ tools, prefix) {
68
+ for (const [name, tool] of Object.entries(tools)) {
69
+ const toolName = `${prefix}_${name}`;
70
+ this.server.tool(toolName, tool.description, tool.inputSchema instanceof z.ZodObject
71
+ ? tool.inputSchema.shape
72
+ : {}, async (input) => {
73
+ try {
74
+ // Validate authentication before executing any tool
75
+ this.validateAuth();
76
+ const db = await this.getDatabase();
77
+ const result = await tool.handler(db, input);
78
+ return {
79
+ content: [
80
+ {
81
+ type: 'text',
82
+ text: JSON.stringify(result, null, 2),
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ catch (error) {
88
+ return {
89
+ content: [
90
+ {
91
+ type: 'text',
92
+ text: JSON.stringify({
93
+ error: true,
94
+ message: error instanceof Error ? error.message : String(error),
95
+ }),
96
+ },
97
+ ],
98
+ isError: true,
99
+ };
100
+ }
101
+ });
102
+ }
103
+ }
104
+ /**
105
+ * Register resources with the MCP server.
106
+ */
107
+ registerResources() {
108
+ // Schema resource
109
+ this.server.resource('schema', 'reverso://schema', async () => {
110
+ const db = await this.getDatabase();
111
+ const result = await schemaTools.get_schema.handler(db, {});
112
+ return {
113
+ contents: [
114
+ {
115
+ uri: 'reverso://schema',
116
+ mimeType: 'application/json',
117
+ text: JSON.stringify(result, null, 2),
118
+ },
119
+ ],
120
+ };
121
+ });
122
+ // Pages resource template
123
+ this.server.resource('page', 'reverso://pages/{slug}', async (uri) => {
124
+ const db = await this.getDatabase();
125
+ const slug = uri.pathname.split('/').pop() ?? '';
126
+ const result = await contentTools.get_page.handler(db, { slug });
127
+ return {
128
+ contents: [
129
+ {
130
+ uri: uri.href,
131
+ mimeType: 'application/json',
132
+ text: JSON.stringify(result, null, 2),
133
+ },
134
+ ],
135
+ };
136
+ });
137
+ // Content resource template
138
+ this.server.resource('content', 'reverso://content/{path}', async (uri) => {
139
+ const db = await this.getDatabase();
140
+ const path = uri.pathname.replace('/content/', '');
141
+ const result = await contentTools.get_content.handler(db, { path });
142
+ return {
143
+ contents: [
144
+ {
145
+ uri: uri.href,
146
+ mimeType: 'application/json',
147
+ text: JSON.stringify(result, null, 2),
148
+ },
149
+ ],
150
+ };
151
+ });
152
+ }
153
+ /**
154
+ * Get or create database connection.
155
+ */
156
+ async getDatabase() {
157
+ if (!this.db) {
158
+ this.db = await createDatabase({ url: this.config.databasePath });
159
+ }
160
+ return this.db;
161
+ }
162
+ /**
163
+ * Start the MCP server with stdio transport.
164
+ */
165
+ async start() {
166
+ const transport = new StdioServerTransport();
167
+ await this.server.connect(transport);
168
+ }
169
+ /**
170
+ * Close the server and database connection.
171
+ */
172
+ async close() {
173
+ if (this.db) {
174
+ // Database cleanup if needed
175
+ this.db = null;
176
+ }
177
+ }
178
+ }
179
+ /**
180
+ * Create and start a Reverso MCP server.
181
+ */
182
+ export async function createMcpServer(config) {
183
+ const server = new ReversoMcpServer(config);
184
+ return server;
185
+ }
186
+ /**
187
+ * Start the MCP server with the given configuration.
188
+ */
189
+ export async function startMcpServer(config) {
190
+ const server = await createMcpServer(config);
191
+ await server.start();
192
+ }
193
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}