@msegoviadev/api-mind-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.
- package/LICENSE +21 -0
- package/README.md +245 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +20 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loader.d.ts +23 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +208 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/parser.d.ts +17 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +215 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/types.d.ts +55 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +172 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/node-bindings.d.ts +2 -0
- package/dist/lib/node-bindings.d.ts.map +1 -0
- package/dist/lib/node-bindings.js +17 -0
- package/dist/lib/node-bindings.js.map +1 -0
- package/dist/tools/get-endpoint-schema.d.ts +20 -0
- package/dist/tools/get-endpoint-schema.d.ts.map +1 -0
- package/dist/tools/get-endpoint-schema.js +90 -0
- package/dist/tools/get-endpoint-schema.js.map +1 -0
- package/dist/tools/list-apis.d.ts +9 -0
- package/dist/tools/list-apis.d.ts.map +1 -0
- package/dist/tools/list-apis.js +28 -0
- package/dist/tools/list-apis.js.map +1 -0
- package/dist/tools/list-endpoints.d.ts +11 -0
- package/dist/tools/list-endpoints.d.ts.map +1 -0
- package/dist/tools/list-endpoints.js +33 -0
- package/dist/tools/list-endpoints.js.map +1 -0
- package/package.json +54 -0
- package/setup-mcp.sh.example +41 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseApiHeader = parseApiHeader;
|
|
4
|
+
exports.parseServers = parseServers;
|
|
5
|
+
exports.stripDeprecationWrapper = stripDeprecationWrapper;
|
|
6
|
+
exports.normalizePath = normalizePath;
|
|
7
|
+
exports.parseEndpointLine = parseEndpointLine;
|
|
8
|
+
exports.parseEndpoints = parseEndpoints;
|
|
9
|
+
exports.findEndpointBlock = findEndpointBlock;
|
|
10
|
+
exports.extractSchemaRefs = extractSchemaRefs;
|
|
11
|
+
exports.findSchemaBlock = findSchemaBlock;
|
|
12
|
+
exports.collectSchemas = collectSchemas;
|
|
13
|
+
exports.parseFullEndpoint = parseFullEndpoint;
|
|
14
|
+
const API_HEADER_REGEX = /^#\s*API:\s*(.+?)\s*—\s*(.+)$/;
|
|
15
|
+
const SERVERS_HEADER_REGEX = /^#\s*Servers:\s*(.+)$/;
|
|
16
|
+
const SECTION_HEADER_REGEX = /^##\s+(.+?)\s*$/;
|
|
17
|
+
const ENDPOINT_LINE_REGEX = /^(~~)?([A-Z]+)(~~)?\s+(\/[^\s]*?)(\s+\[auth:\s*(.+?)\])?\s*$/;
|
|
18
|
+
const SCHEMA_REF_REGEX = /\b([A-Z][a-zA-Z0-9_]*)\b/g;
|
|
19
|
+
function parseApiHeader(content) {
|
|
20
|
+
const lines = content.split("\n");
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
const match = line.match(API_HEADER_REGEX);
|
|
23
|
+
if (match) {
|
|
24
|
+
return {
|
|
25
|
+
title: match[1].trim(),
|
|
26
|
+
defaultUrl: match[2].trim(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function parseServers(content) {
|
|
33
|
+
const lines = content.split("\n");
|
|
34
|
+
for (const line of lines) {
|
|
35
|
+
const match = line.match(SERVERS_HEADER_REGEX);
|
|
36
|
+
if (match) {
|
|
37
|
+
const servers = {};
|
|
38
|
+
const pairs = match[1].split(",");
|
|
39
|
+
for (const pair of pairs) {
|
|
40
|
+
const [label, url] = pair.trim().split("=");
|
|
41
|
+
if (label && url) {
|
|
42
|
+
servers[label.trim()] = url.trim();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return servers;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {};
|
|
49
|
+
}
|
|
50
|
+
function stripDeprecationWrapper(method) {
|
|
51
|
+
return method.replace(/^~~|~~$/g, "");
|
|
52
|
+
}
|
|
53
|
+
function normalizePath(path) {
|
|
54
|
+
return path.replace(/\{[^}:]+:[^}]+\}/g, (match) => {
|
|
55
|
+
return match.substring(0, match.indexOf(":")) + "}";
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function parseEndpointLine(line) {
|
|
59
|
+
const match = line.match(ENDPOINT_LINE_REGEX);
|
|
60
|
+
if (!match)
|
|
61
|
+
return null;
|
|
62
|
+
const method = stripDeprecationWrapper(match[2]);
|
|
63
|
+
const path = normalizePath(match[4]);
|
|
64
|
+
const auth = match[6]?.trim();
|
|
65
|
+
return { method, path, auth: auth || undefined };
|
|
66
|
+
}
|
|
67
|
+
function parseEndpoints(content) {
|
|
68
|
+
const lines = content.split("\n");
|
|
69
|
+
const endpoints = [];
|
|
70
|
+
let currentSection = null;
|
|
71
|
+
let inSchemasSection = false;
|
|
72
|
+
for (const line of lines) {
|
|
73
|
+
if (line.match(/^##\s+Schemas\s*$/i)) {
|
|
74
|
+
inSchemasSection = true;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const sectionMatch = line.match(SECTION_HEADER_REGEX);
|
|
78
|
+
if (sectionMatch) {
|
|
79
|
+
currentSection = sectionMatch[1];
|
|
80
|
+
inSchemasSection = false;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (inSchemasSection)
|
|
84
|
+
continue;
|
|
85
|
+
if (line.startsWith("#"))
|
|
86
|
+
continue;
|
|
87
|
+
const endpoint = parseEndpointLine(line);
|
|
88
|
+
if (endpoint && currentSection) {
|
|
89
|
+
endpoints.push({
|
|
90
|
+
...endpoint,
|
|
91
|
+
section: currentSection,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return endpoints;
|
|
96
|
+
}
|
|
97
|
+
function findEndpointBlock(content, method, path) {
|
|
98
|
+
const normalizedPath = normalizePath(path);
|
|
99
|
+
const lines = content.split("\n");
|
|
100
|
+
const blockLines = [];
|
|
101
|
+
let inBlock = false;
|
|
102
|
+
let foundEndpoint = false;
|
|
103
|
+
for (let i = 0; i < lines.length; i++) {
|
|
104
|
+
const line = lines[i];
|
|
105
|
+
const endpoint = parseEndpointLine(line);
|
|
106
|
+
if (endpoint) {
|
|
107
|
+
if (endpoint.method === method && endpoint.path === normalizedPath) {
|
|
108
|
+
inBlock = true;
|
|
109
|
+
foundEndpoint = true;
|
|
110
|
+
blockLines.push(line);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
else if (inBlock) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (inBlock) {
|
|
118
|
+
if (line.match(/^##\s+/) || line.match(/^(~~)?[A-Z]+(~~)?\s+\//)) {
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
blockLines.push(line);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return foundEndpoint ? blockLines.join("\n") : null;
|
|
125
|
+
}
|
|
126
|
+
function extractSchemaRefs(block) {
|
|
127
|
+
const refs = new Set();
|
|
128
|
+
const matches = block.matchAll(SCHEMA_REF_REGEX);
|
|
129
|
+
for (const match of matches) {
|
|
130
|
+
const name = match[1];
|
|
131
|
+
if (name === "OneOf" || name === "AnyOf" || name === "AllOf" || name === "extends") {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
refs.add(name);
|
|
135
|
+
}
|
|
136
|
+
return Array.from(refs);
|
|
137
|
+
}
|
|
138
|
+
function findSchemaBlock(content, schemaName) {
|
|
139
|
+
const lines = content.split("\n");
|
|
140
|
+
const schemaRegex = new RegExp(`^${schemaName}:\\s*`);
|
|
141
|
+
let inSchema = false;
|
|
142
|
+
let braceDepth = 0;
|
|
143
|
+
const blockLines = [];
|
|
144
|
+
for (const line of lines) {
|
|
145
|
+
if (line.match(schemaRegex)) {
|
|
146
|
+
inSchema = true;
|
|
147
|
+
blockLines.push(line);
|
|
148
|
+
braceDepth += (line.match(/{/g) || []).length;
|
|
149
|
+
braceDepth -= (line.match(/}/g) || []).length;
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (inSchema) {
|
|
153
|
+
blockLines.push(line);
|
|
154
|
+
braceDepth += (line.match(/{/g) || []).length;
|
|
155
|
+
braceDepth -= (line.match(/}/g) || []).length;
|
|
156
|
+
if (line.includes(":") && !line.includes("{") && braceDepth === 0) {
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
if (braceDepth === 0 && line.trim().endsWith("}")) {
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return blockLines.length > 0 ? blockLines.join("\n") : null;
|
|
165
|
+
}
|
|
166
|
+
function collectSchemas(content, endpointBlock) {
|
|
167
|
+
const schemasSection = extractSchemasSection(content);
|
|
168
|
+
const refs = extractSchemaRefs(endpointBlock);
|
|
169
|
+
const collected = [];
|
|
170
|
+
for (const ref of refs) {
|
|
171
|
+
const schemaBlock = findSchemaBlock(schemasSection, ref);
|
|
172
|
+
if (schemaBlock) {
|
|
173
|
+
collected.push(schemaBlock);
|
|
174
|
+
const nestedRefs = extractSchemaRefs(schemaBlock);
|
|
175
|
+
for (const nestedRef of nestedRefs) {
|
|
176
|
+
if (!refs.includes(nestedRef)) {
|
|
177
|
+
const nestedBlock = findSchemaBlock(schemasSection, nestedRef);
|
|
178
|
+
if (nestedBlock) {
|
|
179
|
+
collected.push(nestedBlock);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return collected.join("\n\n");
|
|
186
|
+
}
|
|
187
|
+
function extractSchemasSection(content) {
|
|
188
|
+
const lines = content.split("\n");
|
|
189
|
+
const schemaLines = [];
|
|
190
|
+
let inSchemas = false;
|
|
191
|
+
for (const line of lines) {
|
|
192
|
+
if (line.match(/^##\s+Schemas\s*$/i)) {
|
|
193
|
+
inSchemas = true;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (inSchemas) {
|
|
197
|
+
if (line.match(/^##\s+/)) {
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
schemaLines.push(line);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return schemaLines.join("\n");
|
|
204
|
+
}
|
|
205
|
+
function parseFullEndpoint(content, method, path) {
|
|
206
|
+
const endpointBlock = findEndpointBlock(content, method, path);
|
|
207
|
+
if (!endpointBlock)
|
|
208
|
+
return null;
|
|
209
|
+
const schemas = collectSchemas(content, endpointBlock);
|
|
210
|
+
if (schemas) {
|
|
211
|
+
return endpointBlock + "\n\n" + schemas;
|
|
212
|
+
}
|
|
213
|
+
return endpointBlock;
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface ApiMeta {
|
|
2
|
+
filePath: string;
|
|
3
|
+
title: string;
|
|
4
|
+
defaultUrl: string;
|
|
5
|
+
servers: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
export interface EndpointEntry {
|
|
8
|
+
api: string;
|
|
9
|
+
section: string;
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
auth?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface EndpointIndex {
|
|
15
|
+
environments: string[];
|
|
16
|
+
apis: Record<string, ApiMeta>;
|
|
17
|
+
endpoints: EndpointEntry[];
|
|
18
|
+
}
|
|
19
|
+
export interface ApiInfo {
|
|
20
|
+
name: string;
|
|
21
|
+
title: string;
|
|
22
|
+
defaultUrl: string;
|
|
23
|
+
environments: Record<string, string>;
|
|
24
|
+
}
|
|
25
|
+
export interface ListApisResult {
|
|
26
|
+
apis: ApiInfo[];
|
|
27
|
+
}
|
|
28
|
+
export interface ListEndpointsResult {
|
|
29
|
+
environments: string[];
|
|
30
|
+
endpoints: EndpointEntry[];
|
|
31
|
+
}
|
|
32
|
+
export interface InitOptions {
|
|
33
|
+
specsDir: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ParsedApiHeader {
|
|
36
|
+
title: string;
|
|
37
|
+
defaultUrl: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ParsedEndpoint {
|
|
40
|
+
method: string;
|
|
41
|
+
path: string;
|
|
42
|
+
auth?: string;
|
|
43
|
+
section: string;
|
|
44
|
+
}
|
|
45
|
+
export interface GetEndpointSchemaResult {
|
|
46
|
+
api: string;
|
|
47
|
+
title: string;
|
|
48
|
+
defaultUrl: string;
|
|
49
|
+
environments: Record<string, string>;
|
|
50
|
+
method: string;
|
|
51
|
+
path: string;
|
|
52
|
+
auth: string | null;
|
|
53
|
+
schema: string;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
declare const Server: any;
|
|
3
|
+
declare const StdioServerTransport: any;
|
|
4
|
+
declare const CallToolRequestSchema: any, ListToolsRequestSchema: any;
|
|
5
|
+
declare const initIndex: any;
|
|
6
|
+
declare const initNodeBindings: any;
|
|
7
|
+
declare const listApisDefinition: any, listApisHandler: any;
|
|
8
|
+
declare const listEndpointsDefinition: any, listEndpointsHandler: any;
|
|
9
|
+
declare const getEndpointSchemaDefinition: any, getEndpointSchemaHandler: any;
|
|
10
|
+
declare const resolve: any, isAbsolute: any;
|
|
11
|
+
declare function getSpecsDir(): string;
|
|
12
|
+
declare const SPECS_DIR: string;
|
|
13
|
+
declare const server: any;
|
|
14
|
+
declare let indexReady: boolean;
|
|
15
|
+
declare let indexError: any;
|
|
16
|
+
declare function main(): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,QAAA,MAAQ,MAAM,KAAyD,CAAC;AACxE,QAAA,MAAQ,oBAAoB,KAAyD,CAAC;AACtF,QAAA,MACE,qBAAqB,OACrB,sBAAsB,KACyB,CAAC;AAClD,QAAA,MAAQ,SAAS,KAAgC,CAAC;AAClD,QAAA,MAAQ,gBAAgB,KAAsC,CAAC;AAC/D,QAAA,MAAoB,kBAAkB,OAAW,eAAe,KAAoC,CAAC;AACrG,QAAA,MAAoB,uBAAuB,OAAW,oBAAoB,KAAyC,CAAC;AACpH,QAAA,MAAoB,2BAA2B,OAAW,wBAAwB,KAA8C,CAAC;AACjI,QAAA,MAAQ,OAAO,OAAE,UAAU,KAAoB,CAAC;AAMhD,iBAAS,WAAW,WAkEnB;AAED,QAAA,MAAM,SAAS,QAAgB,CAAC;AAGhC,QAAA,MAAM,MAAM,KAUX,CAAC;AAGF,QAAA,IAAI,UAAU,SAAQ,CAAC;AACvB,QAAA,IAAI,UAAU,KAAO,CAAC;AAiFtB,iBAAe,IAAI,kBAIlB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { Server } = require("@modelcontextprotocol/sdk/server/index.js");
|
|
3
|
+
const { StdioServerTransport } = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
4
|
+
const { CallToolRequestSchema, ListToolsRequestSchema, } = require("@modelcontextprotocol/sdk/types.js");
|
|
5
|
+
const { initIndex } = require("./core/loader.js");
|
|
6
|
+
const { initNodeBindings } = require("./lib/node-bindings.js");
|
|
7
|
+
const { definition: listApisDefinition, handler: listApisHandler } = require("./tools/list-apis.js");
|
|
8
|
+
const { definition: listEndpointsDefinition, handler: listEndpointsHandler } = require("./tools/list-endpoints.js");
|
|
9
|
+
const { definition: getEndpointSchemaDefinition, handler: getEndpointSchemaHandler } = require("./tools/get-endpoint-schema.js");
|
|
10
|
+
const { resolve, isAbsolute } = require("path");
|
|
11
|
+
// Initialize Node.js bindings for file system operations
|
|
12
|
+
initNodeBindings();
|
|
13
|
+
// Get specs directory from command-line, env var, or error
|
|
14
|
+
function getSpecsDir() {
|
|
15
|
+
// Priority 1: Command-line argument
|
|
16
|
+
const args = process.argv.slice(2);
|
|
17
|
+
if (args[0]) {
|
|
18
|
+
if (!isAbsolute(args[0])) {
|
|
19
|
+
console.error(`
|
|
20
|
+
[api-mind] ERROR: Relative paths not supported.
|
|
21
|
+
Provided: ${args[0]}
|
|
22
|
+
Absolute: ${resolve(args[0])}
|
|
23
|
+
|
|
24
|
+
Use absolute path:
|
|
25
|
+
claude mcp add api-mind -- node dist/index.js ${resolve(args[0])}
|
|
26
|
+
`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
console.error(`[api-mind] Specs directory: ${args[0]}`);
|
|
30
|
+
return args[0];
|
|
31
|
+
}
|
|
32
|
+
// Priority 2: Environment variable
|
|
33
|
+
if (process.env.SPECS_DIR) {
|
|
34
|
+
if (!isAbsolute(process.env.SPECS_DIR)) {
|
|
35
|
+
console.error(`
|
|
36
|
+
[api-mind] ERROR: SPECS_DIR must be absolute.
|
|
37
|
+
Provided: ${process.env.SPECS_DIR}
|
|
38
|
+
Absolute: ${resolve(process.env.SPECS_DIR)}
|
|
39
|
+
|
|
40
|
+
Use:
|
|
41
|
+
SPECS_DIR=${resolve(process.env.SPECS_DIR)} claude mcp add api-mind -- ...
|
|
42
|
+
`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
console.error(`[api-mind] Specs directory: ${process.env.SPECS_DIR}`);
|
|
46
|
+
return process.env.SPECS_DIR;
|
|
47
|
+
}
|
|
48
|
+
// Priority 3: No configuration - help user
|
|
49
|
+
console.error(`
|
|
50
|
+
[api-mind] ERROR: No specs directory configured.
|
|
51
|
+
|
|
52
|
+
Setup options:
|
|
53
|
+
|
|
54
|
+
1. Command-line argument:
|
|
55
|
+
claude mcp add api-mind -- node dist/index.js /ABSOLUTE/PATH/TO/SPECS
|
|
56
|
+
|
|
57
|
+
2. Environment variable:
|
|
58
|
+
claude mcp add api-mind --env SPECS_DIR=/ABSOLUTE/PATH/TO/SPECS -- node dist/index.js
|
|
59
|
+
|
|
60
|
+
3. Project .mcp.json:
|
|
61
|
+
{
|
|
62
|
+
"mcpServers": {
|
|
63
|
+
"api-mind": {
|
|
64
|
+
"command": "node",
|
|
65
|
+
"args": ["/path/to/api-mind-claude/dist/index.js"],
|
|
66
|
+
"env": { "SPECS_DIR": "/ABSOLUTE/PATH/TO/SPECS" }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Requirements:
|
|
72
|
+
- Use ABSOLUTE paths only
|
|
73
|
+
- Generate .mind files: spec-mind sync --no-notation ./specs/
|
|
74
|
+
|
|
75
|
+
Docs: https://github.com/msegoviadev/api-mind-mcp
|
|
76
|
+
`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const SPECS_DIR = getSpecsDir();
|
|
80
|
+
// Create MCP server
|
|
81
|
+
const server = new Server({
|
|
82
|
+
name: "api-mind",
|
|
83
|
+
version: "1.0.0",
|
|
84
|
+
}, {
|
|
85
|
+
capabilities: {
|
|
86
|
+
tools: {},
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
// Initialize index on startup
|
|
90
|
+
let indexReady = false;
|
|
91
|
+
let indexError = null;
|
|
92
|
+
initIndex({ specsDir: SPECS_DIR })
|
|
93
|
+
.then(() => {
|
|
94
|
+
indexReady = true;
|
|
95
|
+
console.error("[api-mind] Index initialized successfully");
|
|
96
|
+
})
|
|
97
|
+
.catch((err) => {
|
|
98
|
+
indexError = err;
|
|
99
|
+
console.error("[api-mind] Failed to initialize index:", err.message);
|
|
100
|
+
});
|
|
101
|
+
// Register tools list handler
|
|
102
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
103
|
+
return {
|
|
104
|
+
tools: [
|
|
105
|
+
listApisDefinition,
|
|
106
|
+
listEndpointsDefinition,
|
|
107
|
+
getEndpointSchemaDefinition,
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
// Register tool execution handler
|
|
112
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
113
|
+
const { name, arguments: args } = request.params;
|
|
114
|
+
// Check if index is ready
|
|
115
|
+
if (!indexReady) {
|
|
116
|
+
if (indexError) {
|
|
117
|
+
return {
|
|
118
|
+
content: [
|
|
119
|
+
{
|
|
120
|
+
type: "text",
|
|
121
|
+
text: `Error: Failed to initialize index: ${indexError.message}`,
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
isError: true,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
content: [
|
|
129
|
+
{
|
|
130
|
+
type: "text",
|
|
131
|
+
text: "Error: Index not initialized. Please wait and try again.",
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
isError: true,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
switch (name) {
|
|
139
|
+
case "list_apis":
|
|
140
|
+
return await listApisHandler(args);
|
|
141
|
+
case "list_endpoints":
|
|
142
|
+
return await listEndpointsHandler(args);
|
|
143
|
+
case "get_endpoint_schema":
|
|
144
|
+
return await getEndpointSchemaHandler(args);
|
|
145
|
+
default:
|
|
146
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
151
|
+
return {
|
|
152
|
+
content: [
|
|
153
|
+
{
|
|
154
|
+
type: "text",
|
|
155
|
+
text: `Error executing tool ${name}: ${errorMessage}`,
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
isError: true,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// Start server
|
|
163
|
+
async function main() {
|
|
164
|
+
const transport = new StdioServerTransport();
|
|
165
|
+
await server.connect(transport);
|
|
166
|
+
console.error("[api-mind] MCP server running on stdio");
|
|
167
|
+
}
|
|
168
|
+
main().catch((error) => {
|
|
169
|
+
console.error("[api-mind] Fatal error:", error);
|
|
170
|
+
process.exit(1);
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-bindings.d.ts","sourceRoot":"","sources":["../../src/lib/node-bindings.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initNodeBindings = initNodeBindings;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const loader_js_1 = require("../core/loader.js");
|
|
7
|
+
function initNodeBindings() {
|
|
8
|
+
(0, loader_js_1.setFileReader)(async (path) => {
|
|
9
|
+
return await (0, promises_1.readFile)(path, "utf-8");
|
|
10
|
+
});
|
|
11
|
+
(0, loader_js_1.setDirReader)(async (dir) => {
|
|
12
|
+
const entries = await (0, promises_1.readdir)(dir);
|
|
13
|
+
return entries;
|
|
14
|
+
});
|
|
15
|
+
(0, loader_js_1.setPathJoiner)((...parts) => (0, path_1.join)(...parts));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=node-bindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-bindings.js","sourceRoot":"","sources":["../../src/lib/node-bindings.ts"],"names":[],"mappings":";;AAIA,4CAWC;AAfD,0CAAgD;AAChD,+BAA4B;AAC5B,iDAA+E;AAE/E,SAAgB,gBAAgB;IAC9B,IAAA,yBAAa,EAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACnC,OAAO,MAAM,IAAA,mBAAQ,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,wBAAY,EAAC,KAAK,EAAE,GAAW,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,GAAG,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,IAAA,yBAAa,EAAC,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const definition: Tool;
|
|
3
|
+
export declare function handler(args: {
|
|
4
|
+
api: string;
|
|
5
|
+
method: string;
|
|
6
|
+
path: string;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=get-endpoint-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-endpoint-schema.d.ts","sourceRoot":"","sources":["../../src/tools/get-endpoint-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,UAAU,EAAE,IA2CxB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;GA0ChF"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.definition = void 0;
|
|
4
|
+
exports.handler = handler;
|
|
5
|
+
const loader_js_1 = require("../core/loader.js");
|
|
6
|
+
exports.definition = {
|
|
7
|
+
name: "get_endpoint_schema",
|
|
8
|
+
description: `Returns the full context for a specific endpoint including resolved URL, auth requirements, and schema.
|
|
9
|
+
|
|
10
|
+
Use this to understand an endpoint before constructing a curl command to execute via the bash tool.
|
|
11
|
+
Call this after list_endpoints to get the endpoint contract.
|
|
12
|
+
|
|
13
|
+
## Auth Patterns
|
|
14
|
+
|
|
15
|
+
| Auth in Schema | curl Header |
|
|
16
|
+
|----------------|-------------|
|
|
17
|
+
| \`None\` | No header |
|
|
18
|
+
| \`bearer\` | \`-H 'Authorization: Bearer <TOKEN>'\` |
|
|
19
|
+
| \`oauth2 <scopes>\` | \`-H 'Authorization: Bearer <TOKEN>'\` |
|
|
20
|
+
| \`api_key <header>\` | \`-H '<header>: <KEY>'\` |
|
|
21
|
+
| \`basic\` | \`-H 'Authorization: Basic <base64>'\` |
|
|
22
|
+
|
|
23
|
+
## NOTATION Legend
|
|
24
|
+
|
|
25
|
+
\`?\` optional | \`[ro]\` readOnly | \`[w]\` writeOnly | \`=val\` default
|
|
26
|
+
\`^\` header | \`~\` cookie | \`*N\` multipleOf N | \`|\` enum or nullable
|
|
27
|
+
\`OneOf<A,B>\` on field = discriminated union
|
|
28
|
+
\`{*:T}\` = map/dict | \`{...}\` = open object | \`extends\` = allOf
|
|
29
|
+
\`&\` = inline extension | \`~~name~~\` deprecated | \`#\` = inline note
|
|
30
|
+
\`[multipart]\` \`[form]\` \`[binary]\` \`[text]\` = request body encoding`,
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: "object",
|
|
33
|
+
properties: {
|
|
34
|
+
api: {
|
|
35
|
+
type: "string",
|
|
36
|
+
description: "API name matching the .mind filename",
|
|
37
|
+
},
|
|
38
|
+
method: {
|
|
39
|
+
type: "string",
|
|
40
|
+
description: "HTTP method (GET, POST, PUT, PATCH, DELETE)",
|
|
41
|
+
},
|
|
42
|
+
path: {
|
|
43
|
+
type: "string",
|
|
44
|
+
description: "Endpoint path",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
required: ["api", "method", "path"],
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
async function handler(args) {
|
|
51
|
+
try {
|
|
52
|
+
const result = await (0, loader_js_1.getEndpointSchema)(args.api, args.method, args.path);
|
|
53
|
+
const envList = Object.entries(result.environments)
|
|
54
|
+
.map(([name, url]) => ` ${name}: ${url}`)
|
|
55
|
+
.join("\n");
|
|
56
|
+
const authLine = result.auth ? `Auth: ${result.auth}` : "Auth: None";
|
|
57
|
+
const output = `# API: ${result.title}
|
|
58
|
+
# Base URL: ${result.defaultUrl}
|
|
59
|
+
# Environments:
|
|
60
|
+
${envList}
|
|
61
|
+
|
|
62
|
+
## Endpoint
|
|
63
|
+
${result.method} ${result.path}
|
|
64
|
+
${authLine}
|
|
65
|
+
|
|
66
|
+
## Schema
|
|
67
|
+
${result.schema}`;
|
|
68
|
+
return {
|
|
69
|
+
content: [
|
|
70
|
+
{
|
|
71
|
+
type: "text",
|
|
72
|
+
text: output,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `Error: ${errorMessage}`,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
isError: true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=get-endpoint-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-endpoint-schema.js","sourceRoot":"","sources":["../../src/tools/get-endpoint-schema.ts"],"names":[],"mappings":";;;AAgDA,0BA0CC;AA1FD,iDAAsD;AAGzC,QAAA,UAAU,GAAS;IAC9B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;2EAsB4D;IACzE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC7B;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;KACpC;CACF,CAAC;AAEK,KAAK,UAAU,OAAO,CAAC,IAAmD;IAC/E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAiB,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC;aACzC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;QAErE,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,KAAK;cAC3B,MAAM,CAAC,UAAU;;EAE7B,OAAO;;;EAGP,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;EAC5B,QAAQ;;;EAGR,MAAM,CAAC,MAAM,EAAE,CAAC;QAEd,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,YAAY,EAAE;iBAC/B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const definition: Tool;
|
|
3
|
+
export declare function handler(args: Record<string, never>): Promise<{
|
|
4
|
+
content: {
|
|
5
|
+
type: string;
|
|
6
|
+
text: string;
|
|
7
|
+
}[];
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=list-apis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-apis.d.ts","sourceRoot":"","sources":["../../src/tools/list-apis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,UAAU,EAAE,IAUxB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;;;;;GAUxD"}
|