@honeyfield/rent2b-mcp 1.0.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.
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { Rent2bApiClient } from './api-client.js';
3
+ export declare function createServer(apiClient: Rent2bApiClient): McpServer;
package/dist/server.js ADDED
@@ -0,0 +1,114 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { readFileSync } from 'fs';
4
+ import { fileURLToPath } from 'url';
5
+ import { dirname, join } from 'path';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ function loadGeneratedTools() {
9
+ const toolsPath = join(__dirname, '..', 'generated', 'tools.json');
10
+ try {
11
+ const raw = readFileSync(toolsPath, 'utf-8');
12
+ return JSON.parse(raw);
13
+ }
14
+ catch (err) {
15
+ if (err.code === 'ENOENT') {
16
+ throw new Error(`tools.json not found at ${toolsPath}. Run "npm run generate" first.`);
17
+ }
18
+ throw err;
19
+ }
20
+ }
21
+ function buildZodShape(inputSchema) {
22
+ const shape = {};
23
+ for (const [name, prop] of Object.entries(inputSchema.properties)) {
24
+ let field;
25
+ switch (prop.type) {
26
+ case 'integer':
27
+ case 'number':
28
+ field = z.number().describe(prop.description || name);
29
+ break;
30
+ case 'boolean':
31
+ field = z.boolean().describe(prop.description || name);
32
+ break;
33
+ case 'array':
34
+ field = z.array(z.any()).describe(prop.description || name);
35
+ break;
36
+ default:
37
+ if (prop.enum) {
38
+ field = z
39
+ .enum(prop.enum)
40
+ .describe(prop.description || name);
41
+ }
42
+ else {
43
+ field = z.string().describe(prop.description || name);
44
+ }
45
+ }
46
+ if (!inputSchema.required.includes(name)) {
47
+ field = field.optional();
48
+ }
49
+ shape[name] = field;
50
+ }
51
+ return shape;
52
+ }
53
+ export function createServer(apiClient) {
54
+ const server = new McpServer({
55
+ name: 'rent2b',
56
+ version: '0.1.0',
57
+ });
58
+ const tools = loadGeneratedTools();
59
+ const registeredNames = new Set();
60
+ for (const tool of tools) {
61
+ if (registeredNames.has(tool.name)) {
62
+ console.error(`Skipping duplicate tool: ${tool.name} (${tool.method} ${tool.path})`);
63
+ continue;
64
+ }
65
+ registeredNames.add(tool.name);
66
+ const zodShape = buildZodShape(tool.inputSchema);
67
+ server.tool(tool.name, tool.description, zodShape, async (params) => {
68
+ try {
69
+ let resolvedPath = tool.path;
70
+ const queryParams = {};
71
+ const bodyParams = {};
72
+ for (const [key, value] of Object.entries(params)) {
73
+ if (resolvedPath.includes(`{${key}}`)) {
74
+ resolvedPath = resolvedPath.replace(`{${key}}`, String(value));
75
+ }
76
+ else if (tool.method === 'GET' || tool.method === 'DELETE') {
77
+ queryParams[key] = value;
78
+ }
79
+ else {
80
+ bodyParams[key] = value;
81
+ }
82
+ }
83
+ const response = await apiClient.request(tool.method, resolvedPath, Object.keys(bodyParams).length > 0 ? bodyParams : undefined, Object.keys(queryParams).length > 0 ? queryParams : undefined);
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify(response.data, null, 2),
89
+ },
90
+ ],
91
+ };
92
+ }
93
+ catch (error) {
94
+ const apiErr = error;
95
+ return {
96
+ content: [
97
+ {
98
+ type: 'text',
99
+ text: JSON.stringify({
100
+ error: true,
101
+ message: apiErr.message || 'Unknown error',
102
+ statusCode: apiErr.statusCode,
103
+ details: apiErr.details,
104
+ }, null, 2),
105
+ },
106
+ ],
107
+ isError: true,
108
+ };
109
+ }
110
+ });
111
+ }
112
+ return server;
113
+ }
114
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}