react-docs-mcp 1.0.6 → 1.2.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.
@@ -2,9 +2,25 @@
2
2
  * searchEngine.ts
3
3
  * Implement search functionality over documentation
4
4
  */
5
- import { parseMarkdown } from './markdownParser.js';
5
+ import { parseMarkdown, normalizePath } from './markdownParser.js';
6
6
  import { EmbeddingService } from './embeddingService.js';
7
7
  import CONFIG from './config.js';
8
+ /**
9
+ * Resolve the canonical slug for a doc: Docusaurus-style sites route by
10
+ * frontmatter `id` when present, overriding the file-path-derived slug.
11
+ * Returns the path unchanged for missing/non-string ids.
12
+ */
13
+ export function resolveDocSlug(path, id) {
14
+ if (typeof id !== 'string' || id.length === 0) {
15
+ return path;
16
+ }
17
+ if (id.includes('/')) {
18
+ return id;
19
+ }
20
+ const parts = path.split('/');
21
+ parts[parts.length - 1] = id;
22
+ return parts.join('/');
23
+ }
8
24
  export class SearchEngine {
9
25
  docsManager;
10
26
  embeddingService;
@@ -31,6 +47,11 @@ export class SearchEngine {
31
47
  try {
32
48
  const content = await this.docsManager.readDoc(docPath);
33
49
  const parsedDoc = await parseMarkdown(content, docPath);
50
+ // For Docusaurus-style docs, the frontmatter id IS the live URL slug —
51
+ // key the index by it so paths, URLs, and get_doc lookups all agree
52
+ if (CONFIG.docUrl.useFrontmatterId) {
53
+ parsedDoc.path = resolveDocSlug(parsedDoc.path, parsedDoc.metadata.id);
54
+ }
34
55
  this.documentIndex.set(parsedDoc.path, parsedDoc);
35
56
  }
36
57
  catch (error) {
@@ -38,6 +59,8 @@ export class SearchEngine {
38
59
  }
39
60
  }
40
61
  this.indexed = true;
62
+ // Rebuilt ParsedDocs have no .embedding — force regeneration on next semantic search
63
+ this.embeddingsGenerated = false;
41
64
  console.log(`Indexed ${this.documentIndex.size} documents`);
42
65
  }
43
66
  /**
@@ -230,15 +253,7 @@ export class SearchEngine {
230
253
  if (!this.indexed) {
231
254
  await this.indexDocuments();
232
255
  }
233
- // Normalize path (remove .md if present)
234
- const normalizedPath = path.replace(/\.md$/, '');
235
- return this.documentIndex.get(normalizedPath) || null;
236
- }
237
- /**
238
- * List all available sections
239
- */
240
- getSections() {
241
- return [...CONFIG.sections];
256
+ return this.documentIndex.get(normalizePath(path)) || null;
242
257
  }
243
258
  /**
244
259
  * Get all documents in a section
@@ -1 +1 @@
1
- {"version":3,"file":"searchEngine.js","sourceRoot":"","sources":["../src/searchEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchEngine.js","sourceRoot":"","sources":["../src/searchEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * server.ts
3
+ * Builds and runs the MCP server against the currently active CONFIG.
4
+ * Call configure() with the desired preset before createServer().
5
+ */
6
+ export declare function createServer(): Promise<void>;
7
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgCH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA8SlD"}
package/dist/server.js ADDED
@@ -0,0 +1,283 @@
1
+ /**
2
+ * server.ts
3
+ * Builds and runs the MCP server against the currently active CONFIG.
4
+ * Call configure() with the desired preset before createServer().
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
+ import { z } from 'zod';
10
+ import { DocsManager } from './docsManager.js';
11
+ import { SearchEngine } from './searchEngine.js';
12
+ import { summarizeContent, extractStructure } from './summarizer.js';
13
+ import { titleCase } from './markdownParser.js';
14
+ import CONFIG from './config.js';
15
+ function escapeRegExp(literal) {
16
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
17
+ }
18
+ /**
19
+ * Build the public doc URL for a parsed document. doc.path is already the
20
+ * canonical slug: for useFrontmatterId presets, SearchEngine resolves the
21
+ * frontmatter id into the path at index time, so URLs, paths, and get_doc
22
+ * lookups all agree.
23
+ */
24
+ function buildDocUrl(doc) {
25
+ return `${CONFIG.docUrl.base}/${doc.path}`;
26
+ }
27
+ export async function createServer() {
28
+ // Initialize components
29
+ const docsManager = new DocsManager();
30
+ const searchEngine = new SearchEngine(docsManager);
31
+ // Create MCP server
32
+ const server = new Server({
33
+ name: CONFIG.server.name,
34
+ version: CONFIG.server.version,
35
+ }, {
36
+ capabilities: {
37
+ resources: {},
38
+ tools: {},
39
+ },
40
+ });
41
+ // Tool input schemas
42
+ const searchDocsSchema = z.object({
43
+ query: z.string().describe('Search query string'),
44
+ section: z
45
+ .string()
46
+ .optional()
47
+ .refine(section => section === undefined || CONFIG.sections.includes(section), {
48
+ message: `Unknown section. Valid sections: ${CONFIG.sections.join(', ')}`,
49
+ })
50
+ .describe(`Filter by section (${CONFIG.sections.join(', ')})`),
51
+ limit: z.number().min(1).max(CONFIG.search.maxLimit).optional().describe('Maximum number of results'),
52
+ });
53
+ const getDocSchema = z.object({
54
+ path: z.string().describe(`Document path (e.g., "${CONFIG.pathExample}")`),
55
+ full: z.boolean().optional().describe('Return the full raw page content instead of a ~1500 char summary'),
56
+ });
57
+ const resourceUriRegex = new RegExp(`^${escapeRegExp(CONFIG.resourceUriScheme)}:\\/\\/(.+)$`);
58
+ // Register list resources handler
59
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
60
+ // Only advertise sections that exist in the checked-out docs — e.g. older
61
+ // versioned snapshots may predate a section like releases/
62
+ const existingSections = await docsManager.getExistingSections(CONFIG.sections);
63
+ return {
64
+ resources: existingSections.map(section => {
65
+ const override = CONFIG.sectionResourceOverrides?.[section];
66
+ return {
67
+ uri: `${CONFIG.resourceUriScheme}://${section}`,
68
+ name: override?.name ?? `${CONFIG.docsLabel} ${titleCase(section)} Documentation`,
69
+ description: override?.description ?? `${CONFIG.docsLabel} documentation for the ${section} section`,
70
+ mimeType: 'text/plain',
71
+ };
72
+ }),
73
+ };
74
+ });
75
+ // Register read resource handler
76
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
77
+ const uri = request.params.uri.toString();
78
+ // Parse URI: {resourceUriScheme}://{section}/{path}
79
+ const match = uri.match(resourceUriRegex);
80
+ if (!match) {
81
+ throw new Error(`Invalid resource URI: ${uri}`);
82
+ }
83
+ const resourcePath = match[1];
84
+ // If requesting just a section, list docs in that section
85
+ if (CONFIG.sections.includes(resourcePath)) {
86
+ const docs = await searchEngine.getDocsBySection(resourcePath);
87
+ const docList = docs
88
+ .map(doc => `- ${doc.metadata.title} (${doc.path})`)
89
+ .join('\n');
90
+ return {
91
+ contents: [
92
+ {
93
+ uri,
94
+ mimeType: 'text/plain',
95
+ text: `# ${resourcePath} Documentation\n\nAvailable documents:\n\n${docList}`,
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ // Otherwise, fetch specific document
101
+ const doc = await searchEngine.getDocByPath(resourcePath);
102
+ if (!doc) {
103
+ throw new Error(`Document not found: ${resourcePath}`);
104
+ }
105
+ return {
106
+ contents: [
107
+ {
108
+ uri,
109
+ mimeType: 'text/markdown',
110
+ text: `# ${doc.metadata.title}\n\n${doc.content}`,
111
+ },
112
+ ],
113
+ };
114
+ });
115
+ // Register list tools handler
116
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
117
+ return {
118
+ tools: [
119
+ {
120
+ name: CONFIG.searchToolName,
121
+ description: CONFIG.searchToolDescription,
122
+ inputSchema: {
123
+ type: 'object',
124
+ properties: {
125
+ query: {
126
+ type: 'string',
127
+ description: 'Search query string',
128
+ },
129
+ section: {
130
+ type: 'string',
131
+ description: `Filter by section (${CONFIG.sections.join(', ')})`,
132
+ enum: [...CONFIG.sections],
133
+ },
134
+ limit: {
135
+ type: 'number',
136
+ description: 'Maximum number of results',
137
+ minimum: 1,
138
+ maximum: CONFIG.search.maxLimit,
139
+ },
140
+ },
141
+ required: ['query'],
142
+ },
143
+ },
144
+ {
145
+ name: 'list_sections',
146
+ description: 'List all available documentation sections',
147
+ inputSchema: {
148
+ type: 'object',
149
+ properties: {},
150
+ },
151
+ },
152
+ {
153
+ name: 'get_doc',
154
+ description: `Get a concise summary of a documentation page (~1500 chars), or the full raw page with full:true. Use ${CONFIG.searchToolName} first - only call this if you need more detail than the search snippet provides.`,
155
+ inputSchema: {
156
+ type: 'object',
157
+ properties: {
158
+ path: {
159
+ type: 'string',
160
+ description: `Document path (e.g., "${CONFIG.pathExample}")`,
161
+ },
162
+ full: {
163
+ type: 'boolean',
164
+ description: 'Return the full raw page content instead of a ~1500 char summary',
165
+ },
166
+ },
167
+ required: ['path'],
168
+ },
169
+ },
170
+ {
171
+ name: 'update_docs',
172
+ description: 'Pull latest documentation from Git repository',
173
+ inputSchema: {
174
+ type: 'object',
175
+ properties: {},
176
+ },
177
+ },
178
+ ],
179
+ };
180
+ });
181
+ // Register call tool handler
182
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
183
+ const { name, arguments: args } = request.params;
184
+ try {
185
+ switch (name) {
186
+ case CONFIG.searchToolName: {
187
+ const { query, section, limit } = searchDocsSchema.parse(args);
188
+ const results = await searchEngine.search(query, { section, limit });
189
+ return {
190
+ content: [
191
+ {
192
+ type: 'text',
193
+ text: JSON.stringify(results.map(r => ({
194
+ path: r.doc.path,
195
+ title: r.doc.metadata.title,
196
+ snippet: r.snippet,
197
+ score: r.score,
198
+ url: buildDocUrl(r.doc),
199
+ })), null, 2),
200
+ },
201
+ ],
202
+ };
203
+ }
204
+ case 'list_sections': {
205
+ const sections = await docsManager.getExistingSections(CONFIG.sections);
206
+ return {
207
+ content: [
208
+ {
209
+ type: 'text',
210
+ text: JSON.stringify(sections, null, 2),
211
+ },
212
+ ],
213
+ };
214
+ }
215
+ case 'get_doc': {
216
+ const { path, full } = getDocSchema.parse(args);
217
+ const doc = await searchEngine.getDocByPath(path);
218
+ if (!doc) {
219
+ throw new Error(`Document not found: ${path}`);
220
+ }
221
+ const body = full
222
+ ? { content: doc.content, note: 'Full page content.' }
223
+ : {
224
+ summary: summarizeContent(doc.content, 1500),
225
+ structure: extractStructure(doc.content),
226
+ note: 'This is a summary. Pass full:true for the complete page, or visit the URL.',
227
+ };
228
+ return {
229
+ content: [
230
+ {
231
+ type: 'text',
232
+ text: JSON.stringify({
233
+ path: doc.path,
234
+ section: doc.section,
235
+ title: doc.metadata.title,
236
+ description: doc.metadata.description,
237
+ ...body,
238
+ url: buildDocUrl(doc),
239
+ }, null, 2),
240
+ },
241
+ ],
242
+ };
243
+ }
244
+ case 'update_docs': {
245
+ const updated = await docsManager.updateRepo();
246
+ if (updated) {
247
+ // Re-index documents after update
248
+ await searchEngine.indexDocuments();
249
+ }
250
+ return {
251
+ content: [
252
+ {
253
+ type: 'text',
254
+ text: JSON.stringify({
255
+ updated,
256
+ message: updated
257
+ ? 'Documentation updated successfully'
258
+ : 'Documentation already up to date',
259
+ }, null, 2),
260
+ },
261
+ ],
262
+ };
263
+ }
264
+ default:
265
+ throw new Error(`Unknown tool: ${name}`);
266
+ }
267
+ }
268
+ catch (error) {
269
+ if (error instanceof z.ZodError) {
270
+ throw new Error(`Invalid arguments: ${error.message}`);
271
+ }
272
+ throw error;
273
+ }
274
+ });
275
+ console.error(`Initializing ${CONFIG.docsLabel} Docs MCP Server...`);
276
+ // Initialize repository
277
+ await docsManager.initialize();
278
+ // Start server with stdio transport
279
+ const transport = new StdioServerTransport();
280
+ await server.connect(transport);
281
+ console.error(`${CONFIG.docsLabel} Docs MCP Server running`);
282
+ }
283
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-docs-mcp",
3
- "version": "1.0.6",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server providing AI agents with semantic search over React documentation",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",