react-docs-mcp 1.1.0 → 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.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  AI-powered semantic search over React documentation for Claude, Cursor, and other MCP clients.
8
8
 
9
- Looking for React Native docs instead? See [react-native-docs-mcp](./packages/react-native-docs-mcp).
9
+ > **📱 Also in this repo: [react-native-docs-mcp](https://www.npmjs.com/package/react-native-docs-mcp)** — the same engine, but for the official React Native docs (reactnative.dev). Source lives in [`packages/react-native-docs-mcp`](./packages/react-native-docs-mcp). Both packages share one search engine, so improvements land in both.
10
10
 
11
11
  <p align="center">
12
12
  <img src="./demo.gif" width="100%" alt="React Docs MCP Demo">
@@ -56,6 +56,8 @@ Edit: `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
56
56
 
57
57
  ## Features
58
58
 
59
+ - **🔑 No API Key**: Unlike hosted docs services (Context7, GitMCP), everything runs on your machine — no account, no key, no rate limits
60
+ - **🔌 Works Offline**: Clones the official react.dev docs repo once, then searches locally — no network calls at query time
59
61
  - **🔍 Semantic Search**: AI-powered search using embeddings for conceptual matches
60
62
  - **⚡ Fast Results**: In-memory vector search with hybrid keyword+semantic ranking
61
63
  - **📦 Zero Config**: Works with `npx` - no installation needed
@@ -127,6 +129,7 @@ Get a specific documentation page.
127
129
  **Parameters**:
128
130
 
129
131
  - `path` (required): Document path (e.g., "learn/hooks/useState")
132
+ - `full` (optional): Return the full raw page instead of the ~1500 char summary (default: false)
130
133
 
131
134
  **Example**:
132
135
 
@@ -134,6 +137,13 @@ Get a specific documentation page.
134
137
  Get the useState documentation
135
138
  ```
136
139
 
140
+ **Why `full`?** The default ~1500 char summary is enough for most API references, but it can cut off partway through longer pages — migration guides, upgrade walkthroughs, or anything with many sequential steps. If the summary seems to end mid-thought or you need every step of a guide, ask for the full page:
141
+
142
+ ```
143
+ Get the full content of the React 19 upgrade guide, not just the summary
144
+ ```
145
+ which calls `get_doc` with `{ "path": "learn/upgrading-to-react-19", "full": true }` and returns the complete raw page instead of the truncated summary.
146
+
137
147
  #### `list_sections`
138
148
 
139
149
  List all available documentation sections.
@@ -148,6 +158,14 @@ What sections are available?
148
158
 
149
159
  Pull latest documentation from the Git repository.
150
160
 
161
+ ### CLI
162
+
163
+ ```bash
164
+ npx react-docs-mcp --version # print the installed package version and exit
165
+ ```
166
+
167
+ (Version pinning via `--docs-version` is a [react-native-docs-mcp](./packages/react-native-docs-mcp) feature — react.dev has no versioned docs.)
168
+
151
169
  **Example**:
152
170
 
153
171
  ```
package/dist/config.d.ts CHANGED
@@ -39,33 +39,22 @@ export interface DocsMcpPreset {
39
39
  docsLabel: string;
40
40
  searchToolName: string;
41
41
  searchToolDescription: string;
42
+ pathExample: string;
42
43
  docUrl: DocUrlConfig;
43
44
  sectionResourceOverrides?: Partial<Record<string, SectionResourceOverride>>;
44
45
  }
45
46
  /**
46
- * Resolved runtime config (preset values + derived repo.localPath)
47
+ * Resolved runtime config: preset values with repo.localPath derived from the
48
+ * cache dir. Derived from DocsMcpPreset so new preset fields flow through.
47
49
  */
48
- export interface DocsMcpConfig {
50
+ export type DocsMcpConfig = Omit<DocsMcpPreset, 'cacheDirName' | 'repoFolderName' | 'repo'> & {
49
51
  repo: {
50
52
  url: string;
51
- localPath: string;
52
53
  contentPath: string;
54
+ localPath: string;
53
55
  };
54
- search: SearchConfig;
55
- server: {
56
- name: string;
57
- version: string;
58
- };
59
- sections: readonly string[];
60
- resourceUriScheme: string;
61
- docsLabel: string;
62
- searchToolName: string;
63
- searchToolDescription: string;
64
- docUrl: DocUrlConfig;
65
- sectionResourceOverrides?: Partial<Record<string, SectionResourceOverride>>;
66
- }
56
+ };
67
57
  declare let activeConfig: DocsMcpConfig;
68
58
  export declare function configure(preset: DocsMcpPreset): void;
69
59
  export { activeConfig as default };
70
- export type Section = string;
71
60
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAC7E;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAC7E;AA4CD,QAAA,IAAI,YAAY,EAAE,aAAsC,CAAC;AAEzD,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAErD;AAGD,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC;AACnC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuBH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IAGb,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;CAC7E;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,gBAAgB,GAAG,MAAM,CAAC,GAAG;IAC5F,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAiBF,QAAA,IAAI,YAAY,EAAE,aAAwC,CAAC;AAE3D,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAErD;AAGD,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC"}
package/dist/config.js CHANGED
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { homedir } from 'os';
6
6
  import { join } from 'path';
7
+ import { reactDocsPreset } from './presets/reactDocs.js';
7
8
  // Determine cache directory based on OS
8
9
  const getCacheDir = (cacheDirName) => {
9
10
  const platform = process.platform;
@@ -30,35 +31,9 @@ function resolve(preset) {
30
31
  },
31
32
  };
32
33
  }
33
- const defaultPreset = {
34
- cacheDirName: 'react-docs-mcp',
35
- repoFolderName: 'react-dev-repo',
36
- repo: {
37
- url: 'https://github.com/reactjs/react.dev.git',
38
- contentPath: 'src/content',
39
- },
40
- search: {
41
- defaultLimit: 10,
42
- maxLimit: 50,
43
- minScore: 0.1,
44
- semanticSearchEnabled: true,
45
- semanticMinSimilarity: 0.3,
46
- hybridKeywordWeight: 0.3,
47
- hybridSemanticWeight: 0.7,
48
- },
49
- server: {
50
- name: 'react-docs-mcp',
51
- version: '1.0.0',
52
- },
53
- sections: ['learn', 'reference', 'blog', 'community'],
54
- resourceUriScheme: 'react-docs',
55
- docsLabel: 'React',
56
- searchToolName: 'search_react_docs',
57
- searchToolDescription: 'Search across React documentation. Returns relevant documentation pages with snippets.',
58
- docUrl: { base: 'https://react.dev', useFrontmatterId: false },
59
- };
60
34
  // Module-level active config; swappable via configure() before the server starts.
61
- let activeConfig = resolve(defaultPreset);
35
+ // Seeded from the react.dev preset (single source of truth — no duplicate defaults).
36
+ let activeConfig = resolve(reactDocsPreset);
62
37
  export function configure(preset) {
63
38
  activeConfig = resolve(preset);
64
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,wCAAwC;AACxC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAU,EAAE;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClD,gCAAgC;QAChC,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,8BAA8B;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;IACxF,CAAC;IAED,+BAA+B;IAC/B,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AAsEF,SAAS,OAAO,CAAC,MAAqB;IACpC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/D,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE;YACJ,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;SAC3D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAkB;IACnC,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,gBAAgB;IAChC,IAAI,EAAE;QACJ,GAAG,EAAE,0CAA0C;QAC/C,WAAW,EAAE,aAAa;KAC3B;IACD,MAAM,EAAE;QACN,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,GAAG;QACb,qBAAqB,EAAE,IAAI;QAC3B,qBAAqB,EAAE,GAAG;QAC1B,mBAAmB,EAAE,GAAG;QACxB,oBAAoB,EAAE,GAAG;KAC1B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC;IACrD,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,OAAO;IAClB,cAAc,EAAE,mBAAmB;IACnC,qBAAqB,EAAE,wFAAwF;IAC/G,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,EAAE;CAC/D,CAAC;AAEF,kFAAkF;AAClF,IAAI,YAAY,GAAkB,OAAO,CAAC,aAAa,CAAC,CAAC;AAEzD,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,wFAAwF;AACxF,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,wCAAwC;AACxC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAU,EAAE;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClD,gCAAgC;QAChC,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,8BAA8B;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,CAAC;IACxF,CAAC;IAED,+BAA+B;IAC/B,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC;AA6DF,SAAS,OAAO,CAAC,MAAqB;IACpC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAE/D,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE;YACJ,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;SAC3D;KACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,qFAAqF;AACrF,IAAI,YAAY,GAAkB,OAAO,CAAC,eAAe,CAAC,CAAC;AAE3D,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,wFAAwF;AACxF,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC"}
@@ -19,7 +19,10 @@ export declare class DocsManager {
19
19
  */
20
20
  private checkRepoExists;
21
21
  /**
22
- * Clone the repository
22
+ * Clone the repository.
23
+ * Clones into a temp directory and renames into place so that two
24
+ * processes starting on a fresh machine (e.g. two MCP servers sharing one
25
+ * cache) don't corrupt each other; the loser discards its redundant copy.
23
26
  */
24
27
  private cloneRepo;
25
28
  /**
@@ -42,6 +45,13 @@ export declare class DocsManager {
42
45
  * @returns Array of file paths relative to content root
43
46
  */
44
47
  getAllDocs(): Promise<string[]>;
48
+ /**
49
+ * Filter a list of section names down to those whose directory actually
50
+ * exists under the content root. Lets the server avoid advertising
51
+ * sections that are empty in the checked-out docs (e.g. a versioned
52
+ * snapshot that predates a section).
53
+ */
54
+ getExistingSections(sections: readonly string[]): Promise<string[]>;
45
55
  /**
46
56
  * Read file content
47
57
  * @param relativePath - Path relative to content root
@@ -1 +1 @@
1
- {"version":3,"file":"docsManager.d.ts","sourceRoot":"","sources":["../src/docsManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAoC;;IAQrD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,SAAS;IAevB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAsBtC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAgCpC;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6B1D;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBrC;;;;OAIG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpD;;;OAGG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUxD"}
1
+ {"version":3,"file":"docsManager.d.ts","sourceRoot":"","sources":["../src/docsManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAoC;;IAQrD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;YACW,eAAe;IAS7B;;;;;OAKG;YACW,SAAS;IAiCvB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAsBtC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAgCpC;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6B1D;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBrC;;;;;OAKG;IACG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAezE;;;;OAIG;IACG,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpD;;;OAGG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUxD"}
@@ -24,13 +24,22 @@ export class DocsManager {
24
24
  async initialize() {
25
25
  const repoExists = await this.checkRepoExists();
26
26
  if (!repoExists) {
27
- console.log('Cloning React documentation repository...');
27
+ console.log('Cloning documentation repository...');
28
28
  await this.cloneRepo();
29
29
  console.log('Repository cloned successfully');
30
30
  }
31
31
  else {
32
32
  console.log('Repository already exists');
33
33
  }
34
+ // Fail loudly instead of serving an empty index when the configured
35
+ // content path is missing (e.g. an invalid --docs-version value)
36
+ try {
37
+ await fs.access(this.contentPath);
38
+ }
39
+ catch {
40
+ throw new Error(`Docs content path not found: ${this.contentPath}. ` +
41
+ 'The cloned repository has no such folder — if you passed --docs-version, check that this docs version exists.');
42
+ }
34
43
  }
35
44
  /**
36
45
  * Check if repository exists locally
@@ -45,17 +54,38 @@ export class DocsManager {
45
54
  }
46
55
  }
47
56
  /**
48
- * Clone the repository
57
+ * Clone the repository.
58
+ * Clones into a temp directory and renames into place so that two
59
+ * processes starting on a fresh machine (e.g. two MCP servers sharing one
60
+ * cache) don't corrupt each other; the loser discards its redundant copy.
49
61
  */
50
62
  async cloneRepo() {
63
+ const tempPath = `${this.repoPath}.cloning-${process.pid}`;
51
64
  try {
52
65
  // Ensure parent directory exists
53
66
  await fs.mkdir(path.dirname(this.repoPath), { recursive: true });
54
- await this.git.clone(CONFIG.repo.url, this.repoPath, {
67
+ await this.git.clone(CONFIG.repo.url, tempPath, {
55
68
  '--depth': 1, // Shallow clone for faster download
56
69
  });
70
+ try {
71
+ await fs.rename(tempPath, this.repoPath);
72
+ }
73
+ catch (renameError) {
74
+ if (await this.checkRepoExists()) {
75
+ // Another process finished the clone first — ours is redundant
76
+ await fs.rm(tempPath, { recursive: true, force: true });
77
+ return;
78
+ }
79
+ throw renameError;
80
+ }
57
81
  }
58
82
  catch (error) {
83
+ try {
84
+ await fs.rm(tempPath, { recursive: true, force: true });
85
+ }
86
+ catch {
87
+ // best-effort cleanup of the temp clone
88
+ }
59
89
  throw new Error(`Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`);
60
90
  }
61
91
  }
@@ -155,6 +185,24 @@ export class DocsManager {
155
185
  this.fileCache.set(cacheKey, files);
156
186
  return files;
157
187
  }
188
+ /**
189
+ * Filter a list of section names down to those whose directory actually
190
+ * exists under the content root. Lets the server avoid advertising
191
+ * sections that are empty in the checked-out docs (e.g. a versioned
192
+ * snapshot that predates a section).
193
+ */
194
+ async getExistingSections(sections) {
195
+ const checks = await Promise.all(sections.map(async (section) => {
196
+ try {
197
+ await fs.access(path.join(this.contentPath, section));
198
+ return section;
199
+ }
200
+ catch {
201
+ return null;
202
+ }
203
+ }));
204
+ return checks.filter((section) => section !== null);
205
+ }
158
206
  /**
159
207
  * Read file content
160
208
  * @param relativePath - Path relative to content root
@@ -1 +1 @@
1
- {"version":3,"file":"docsManager.js","sourceRoot":"","sources":["../src/docsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"docsManager.js","sourceRoot":"","sources":["../src/docsManager.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -7,6 +7,12 @@
7
7
  import { configure } from './config.js';
8
8
  import { reactDocsPreset } from './presets/reactDocs.js';
9
9
  import { createServer } from './server.js';
10
+ // package.json's postinstall runs `node dist/index.js --version`; without this
11
+ // guard that would start the server and clone the docs repo during npm install.
12
+ if (process.argv.includes('--version') || process.argv.includes('-v')) {
13
+ console.log(reactDocsPreset.server.version);
14
+ process.exit(0);
15
+ }
10
16
  configure(reactDocsPreset);
11
17
  createServer().catch(error => {
12
18
  console.error('Failed to start server:', error);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS,CAAC,eAAe,CAAC,CAAC;AAE3B,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,+EAA+E;AAC/E,gFAAgF;AAChF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,CAAC,eAAe,CAAC,CAAC;AAE3B,YAAY,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -22,4 +22,13 @@ export declare function markdownToPlainText(markdown: string): Promise<string>;
22
22
  * E.g., "learn/hooks/useState.md" -> "learn"
23
23
  */
24
24
  export declare function extractSection(path: string): string;
25
+ /**
26
+ * Normalize path (forward slashes, no leading slash, no .md extension for display)
27
+ */
28
+ export declare function normalizePath(filePath: string): string;
29
+ /**
30
+ * Convert a kebab-case or snake_case slug to Title Case
31
+ * E.g., "the-new-architecture" -> "The New Architecture"
32
+ */
33
+ export declare function titleCase(slug: string): string;
25
34
  //# sourceMappingURL=markdownParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownParser.d.ts","sourceRoot":"","sources":["../src/markdownParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CA2BpB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD"}
1
+ {"version":3,"file":"markdownParser.d.ts","sourceRoot":"","sources":["../src/markdownParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CA2BpB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
@@ -61,12 +61,23 @@ export function extractSection(path) {
61
61
  /**
62
62
  * Normalize path (forward slashes, no leading slash, no .md extension for display)
63
63
  */
64
- function normalizePath(filePath) {
64
+ export function normalizePath(filePath) {
65
65
  return filePath
66
66
  .replace(/\\/g, '/') // Convert backslashes to forward slashes
67
67
  .replace(/^\/+/, '') // Remove leading slashes
68
68
  .replace(/\.mdx?$/, ''); // Remove .md/.mdx extension for cleaner paths
69
69
  }
70
+ /**
71
+ * Convert a kebab-case or snake_case slug to Title Case
72
+ * E.g., "the-new-architecture" -> "The New Architecture"
73
+ */
74
+ export function titleCase(slug) {
75
+ return slug
76
+ .replace(/[-_]/g, ' ')
77
+ .split(' ')
78
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
79
+ .join(' ');
80
+ }
70
81
  /**
71
82
  * Extract title from path if not in frontmatter
72
83
  * E.g., "learn/hooks/useState" -> "useState"
@@ -75,11 +86,6 @@ function extractTitleFromPath(filePath) {
75
86
  const normalized = normalizePath(filePath);
76
87
  const parts = normalized.split('/');
77
88
  const filename = parts[parts.length - 1] || 'Untitled';
78
- // Convert kebab-case or snake_case to Title Case
79
- return filename
80
- .replace(/[-_]/g, ' ')
81
- .split(' ')
82
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
83
- .join(' ');
89
+ return titleCase(filename);
84
90
  }
85
91
  //# sourceMappingURL=markdownParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdownParser.js","sourceRoot":"","sources":["../src/markdownParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,IAAY;IAEZ,oBAAoB;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3D,mBAAmB;IACnB,MAAM,QAAQ,GAAgB;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,IAAI,CAAC;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,IAAI;KACR,CAAC;IAEF,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAE7D,4BAA4B;IAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,eAAe;QACxB,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE;SAC1B,GAAG,CAAC,aAAa,CAAC;SAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC;SAClB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;SAC5C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,QAAQ;SACZ,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,yCAAyC;SAC7D,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,yBAAyB;SAC7C,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;AAC3E,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;IAEvD,iDAAiD;IACjD,OAAO,QAAQ;SACZ,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"markdownParser.js","sourceRoot":"","sources":["../src/markdownParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,IAAY;IAEZ,oBAAoB;IACpB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3D,mBAAmB;IACnB,MAAM,QAAQ,GAAgB;QAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,IAAI,CAAC;QAC/C,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,IAAI;KACR,CAAC;IAEF,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAE7D,4BAA4B;IAC5B,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,QAAQ;QACR,OAAO,EAAE,eAAe;QACxB,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE;SAC1B,GAAG,CAAC,aAAa,CAAC;SAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB,OAAO,MAAM,CAAC,MAAM,CAAC;SAClB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,uBAAuB;SAC5C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ;SACZ,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,yCAAyC;SAC7D,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,yBAAyB;SAC7C,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;IAEvD,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactDocs.d.ts","sourceRoot":"","sources":["../../src/presets/reactDocs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,aA4C7B,CAAC"}
1
+ {"version":3,"file":"reactDocs.d.ts","sourceRoot":"","sources":["../../src/presets/reactDocs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,eAAO,MAAM,eAAe,EAAE,aAqC7B,CAAC"}
@@ -2,6 +2,7 @@
2
2
  * reactDocs.ts
3
3
  * Preset for the default react-docs-mcp package: github.com/reactjs/react.dev.git
4
4
  */
5
+ import { DEFAULT_SEARCH } from './searchDefaults.js';
5
6
  export const reactDocsPreset = {
6
7
  cacheDirName: 'react-docs-mcp',
7
8
  repoFolderName: 'react-dev-repo',
@@ -9,24 +10,17 @@ export const reactDocsPreset = {
9
10
  url: 'https://github.com/reactjs/react.dev.git',
10
11
  contentPath: 'src/content',
11
12
  },
12
- search: {
13
- defaultLimit: 10,
14
- maxLimit: 50,
15
- minScore: 0.1,
16
- semanticSearchEnabled: true,
17
- semanticMinSimilarity: 0.3,
18
- hybridKeywordWeight: 0.3,
19
- hybridSemanticWeight: 0.7,
20
- },
13
+ search: { ...DEFAULT_SEARCH },
21
14
  server: {
22
15
  name: 'react-docs-mcp',
23
- version: '1.1.0',
16
+ version: '1.2.0',
24
17
  },
25
18
  sections: ['learn', 'reference', 'blog', 'community'],
26
19
  resourceUriScheme: 'react-docs',
27
20
  docsLabel: 'React',
28
21
  searchToolName: 'search_react_docs',
29
22
  searchToolDescription: 'Search across React documentation. Returns relevant documentation pages with snippets.',
23
+ pathExample: 'reference/react/useState',
30
24
  docUrl: { base: 'https://react.dev', useFrontmatterId: false },
31
25
  sectionResourceOverrides: {
32
26
  learn: {
@@ -1 +1 @@
1
- {"version":3,"file":"reactDocs.js","sourceRoot":"","sources":["../../src/presets/reactDocs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,gBAAgB;IAChC,IAAI,EAAE;QACJ,GAAG,EAAE,0CAA0C;QAC/C,WAAW,EAAE,aAAa;KAC3B;IACD,MAAM,EAAE;QACN,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,GAAG;QACb,qBAAqB,EAAE,IAAI;QAC3B,qBAAqB,EAAE,GAAG;QAC1B,mBAAmB,EAAE,GAAG;QACxB,oBAAoB,EAAE,GAAG;KAC1B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC;IACrD,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,OAAO;IAClB,cAAc,EAAE,mBAAmB;IACnC,qBAAqB,EAAE,wFAAwF;IAC/G,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,EAAE;IAC9D,wBAAwB,EAAE;QACxB,KAAK,EAAE;YACL,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,mDAAmD;SACjE;QACD,SAAS,EAAE;YACT,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,4CAA4C;SAC1D;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,yCAAyC;SACvD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,+BAA+B;YACrC,WAAW,EAAE,wDAAwD;SACtE;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"reactDocs.js","sourceRoot":"","sources":["../../src/presets/reactDocs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAAkB;IAC5C,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,gBAAgB;IAChC,IAAI,EAAE;QACJ,GAAG,EAAE,0CAA0C;QAC/C,WAAW,EAAE,aAAa;KAC3B;IACD,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;IAC7B,MAAM,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC;IACrD,iBAAiB,EAAE,YAAY;IAC/B,SAAS,EAAE,OAAO;IAClB,cAAc,EAAE,mBAAmB;IACnC,qBAAqB,EAAE,wFAAwF;IAC/G,WAAW,EAAE,0BAA0B;IACvC,MAAM,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,KAAK,EAAE;IAC9D,wBAAwB,EAAE;QACxB,KAAK,EAAE;YACL,IAAI,EAAE,2BAA2B;YACjC,WAAW,EAAE,mDAAmD;SACjE;QACD,SAAS,EAAE;YACT,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,4CAA4C;SAC1D;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,yCAAyC;SACvD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,+BAA+B;YACrC,WAAW,EAAE,wDAAwD;SACtE;KACF;CACF,CAAC"}
@@ -5,15 +5,17 @@
5
5
  * Structure verified directly against the repo (Docusaurus-based):
6
6
  * - Docs live at root `docs/` (not under `website/`), 230 .md + 9 .mdx files.
7
7
  * - 213 of 241 files sit flat at `docs/` root with no section; only
8
- * `the-new-architecture/`, `legacy/`, and `releases/` are real subfolders.
9
- * - `docs/` targets the unversioned "current" folder rather than a pinned
10
- * `versioned_docs/version-X.XX`, since a pinned version string would go
11
- * stale every release; content may be briefly ahead of the latest release.
12
- * - Some pages set a frontmatter `id` that overrides the file-path-derived
13
- * URL slug (e.g. docs/getting-started.md -> id: environment-setup), so
14
- * doc URLs must prefer `id` over the raw path to avoid dead links.
8
+ * `the-new-architecture/`, `legacy/`, and `releases/` are real subfolders
9
+ * (older versioned snapshots may lack some the server filters advertised
10
+ * sections to those that exist on disk at runtime).
11
+ * - "latest" targets the unversioned root `docs/` folder; pinned versions
12
+ * target `website/versioned_docs/version-X.YY/` inside the same clone.
13
+ * - Docusaurus routes by frontmatter `id` when present (in all versions), so
14
+ * the engine resolves ids into canonical doc paths/slugs at index time
15
+ * (docUrl.useFrontmatterId).
15
16
  * - website/blog/ is a separate content root and is out of scope for v1.
16
17
  */
17
18
  import type { DocsMcpPreset } from '../config.js';
18
- export declare const reactNativeDocsPreset: DocsMcpPreset;
19
+ export declare const LATEST_VERSION = "latest";
20
+ export declare function resolveReactNativeDocsPreset(version?: string): DocsMcpPreset;
19
21
  //# sourceMappingURL=reactNativeDocs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDocs.d.ts","sourceRoot":"","sources":["../../src/presets/reactNativeDocs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,eAAO,MAAM,qBAAqB,EAAE,aA0BnC,CAAC"}
1
+ {"version":3,"file":"reactNativeDocs.d.ts","sourceRoot":"","sources":["../../src/presets/reactNativeDocs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,eAAO,MAAM,cAAc,WAAW,CAAC;AAEvC,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,MAAuB,GAAG,aAAa,CAkC5F"}
@@ -5,40 +5,47 @@
5
5
  * Structure verified directly against the repo (Docusaurus-based):
6
6
  * - Docs live at root `docs/` (not under `website/`), 230 .md + 9 .mdx files.
7
7
  * - 213 of 241 files sit flat at `docs/` root with no section; only
8
- * `the-new-architecture/`, `legacy/`, and `releases/` are real subfolders.
9
- * - `docs/` targets the unversioned "current" folder rather than a pinned
10
- * `versioned_docs/version-X.XX`, since a pinned version string would go
11
- * stale every release; content may be briefly ahead of the latest release.
12
- * - Some pages set a frontmatter `id` that overrides the file-path-derived
13
- * URL slug (e.g. docs/getting-started.md -> id: environment-setup), so
14
- * doc URLs must prefer `id` over the raw path to avoid dead links.
8
+ * `the-new-architecture/`, `legacy/`, and `releases/` are real subfolders
9
+ * (older versioned snapshots may lack some the server filters advertised
10
+ * sections to those that exist on disk at runtime).
11
+ * - "latest" targets the unversioned root `docs/` folder; pinned versions
12
+ * target `website/versioned_docs/version-X.YY/` inside the same clone.
13
+ * - Docusaurus routes by frontmatter `id` when present (in all versions), so
14
+ * the engine resolves ids into canonical doc paths/slugs at index time
15
+ * (docUrl.useFrontmatterId).
15
16
  * - website/blog/ is a separate content root and is out of scope for v1.
16
17
  */
17
- export const reactNativeDocsPreset = {
18
- cacheDirName: 'react-native-docs-mcp',
19
- repoFolderName: 'react-native-website-repo',
20
- repo: {
21
- url: 'https://github.com/facebook/react-native-website.git',
22
- contentPath: 'docs',
23
- },
24
- search: {
25
- defaultLimit: 10,
26
- maxLimit: 50,
27
- minScore: 0.1,
28
- semanticSearchEnabled: true,
29
- semanticMinSimilarity: 0.3,
30
- hybridKeywordWeight: 0.3,
31
- hybridSemanticWeight: 0.7,
32
- },
33
- server: {
34
- name: 'react-native-docs-mcp',
35
- version: '0.1.0',
36
- },
37
- sections: ['the-new-architecture', 'legacy', 'releases'],
38
- resourceUriScheme: 'react-native-docs',
39
- docsLabel: 'React Native',
40
- searchToolName: 'search_react_native_docs',
41
- searchToolDescription: 'Search across React Native documentation. Returns relevant documentation pages with snippets.',
42
- docUrl: { base: 'https://reactnative.dev/docs', useFrontmatterId: true },
43
- };
18
+ import { DEFAULT_SEARCH } from './searchDefaults.js';
19
+ export const LATEST_VERSION = 'latest';
20
+ export function resolveReactNativeDocsPreset(version = LATEST_VERSION) {
21
+ const isLatest = version === LATEST_VERSION;
22
+ if (!isLatest && !/^\d+\.\d+$/.test(version)) {
23
+ throw new Error(`Invalid React Native docs version "${version}". Expected a release like "0.77" or "${LATEST_VERSION}".`);
24
+ }
25
+ return {
26
+ cacheDirName: 'react-native-docs-mcp',
27
+ repoFolderName: 'react-native-website-repo',
28
+ repo: {
29
+ url: 'https://github.com/facebook/react-native-website.git',
30
+ contentPath: isLatest ? 'docs' : `website/versioned_docs/version-${version}`,
31
+ },
32
+ search: { ...DEFAULT_SEARCH },
33
+ server: {
34
+ name: 'react-native-docs-mcp',
35
+ version: '0.2.0',
36
+ },
37
+ sections: ['the-new-architecture', 'legacy', 'releases'],
38
+ resourceUriScheme: 'react-native-docs',
39
+ docsLabel: 'React Native',
40
+ searchToolName: 'search_react_native_docs',
41
+ searchToolDescription: 'Search across React Native documentation. Returns relevant documentation pages with snippets.',
42
+ pathExample: 'the-new-architecture/using-codegen',
43
+ docUrl: {
44
+ base: isLatest ? 'https://reactnative.dev/docs' : `https://reactnative.dev/docs/${version}`,
45
+ // Frontmatter-id routing is a property of the Docusaurus content format,
46
+ // not of the version — versioned snapshots carry the same id overrides
47
+ useFrontmatterId: true,
48
+ },
49
+ };
50
+ }
44
51
  //# sourceMappingURL=reactNativeDocs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reactNativeDocs.js","sourceRoot":"","sources":["../../src/presets/reactNativeDocs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAkB;IAClD,YAAY,EAAE,uBAAuB;IACrC,cAAc,EAAE,2BAA2B;IAC3C,IAAI,EAAE;QACJ,GAAG,EAAE,sDAAsD;QAC3D,WAAW,EAAE,MAAM;KACpB;IACD,MAAM,EAAE;QACN,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,GAAG;QACb,qBAAqB,EAAE,IAAI;QAC3B,qBAAqB,EAAE,GAAG;QAC1B,mBAAmB,EAAE,GAAG;QACxB,oBAAoB,EAAE,GAAG;KAC1B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,OAAO;KACjB;IACD,QAAQ,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,UAAU,CAAC;IACxD,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,cAAc;IACzB,cAAc,EAAE,0BAA0B;IAC1C,qBAAqB,EAAE,+FAA+F;IACtH,MAAM,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,gBAAgB,EAAE,IAAI,EAAE;CACzE,CAAC"}
1
+ {"version":3,"file":"reactNativeDocs.js","sourceRoot":"","sources":["../../src/presets/reactNativeDocs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC;AAEvC,MAAM,UAAU,4BAA4B,CAAC,UAAkB,cAAc;IAC3E,MAAM,QAAQ,GAAG,OAAO,KAAK,cAAc,CAAC;IAE5C,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,yCAAyC,cAAc,IAAI,CACzG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,YAAY,EAAE,uBAAuB;QACrC,cAAc,EAAE,2BAA2B;QAC3C,IAAI,EAAE;YACJ,GAAG,EAAE,sDAAsD;YAC3D,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kCAAkC,OAAO,EAAE;SAC7E;QACD,MAAM,EAAE,EAAE,GAAG,cAAc,EAAE;QAC7B,MAAM,EAAE;YACN,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,OAAO;SACjB;QACD,QAAQ,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,UAAU,CAAC;QACxD,iBAAiB,EAAE,mBAAmB;QACtC,SAAS,EAAE,cAAc;QACzB,cAAc,EAAE,0BAA0B;QAC1C,qBAAqB,EAAE,+FAA+F;QACtH,WAAW,EAAE,oCAAoC;QACjD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,gCAAgC,OAAO,EAAE;YAC3F,yEAAyE;YACzE,uEAAuE;YACvE,gBAAgB,EAAE,IAAI;SACvB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * searchDefaults.ts
3
+ * Shared search tuning used by all presets — single source of truth so a
4
+ * ranking change can't silently apply to one published server but not the other.
5
+ * (Type-only import from config.js keeps this module free of runtime cycles.)
6
+ */
7
+ import type { SearchConfig } from '../config.js';
8
+ export declare const DEFAULT_SEARCH: SearchConfig;
9
+ //# sourceMappingURL=searchDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchDefaults.d.ts","sourceRoot":"","sources":["../../src/presets/searchDefaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,eAAO,MAAM,cAAc,EAAE,YAQ5B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * searchDefaults.ts
3
+ * Shared search tuning used by all presets — single source of truth so a
4
+ * ranking change can't silently apply to one published server but not the other.
5
+ * (Type-only import from config.js keeps this module free of runtime cycles.)
6
+ */
7
+ export const DEFAULT_SEARCH = {
8
+ defaultLimit: 10,
9
+ maxLimit: 50,
10
+ minScore: 0.1,
11
+ semanticSearchEnabled: true,
12
+ semanticMinSimilarity: 0.3,
13
+ hybridKeywordWeight: 0.3,
14
+ hybridSemanticWeight: 0.7,
15
+ };
16
+ //# sourceMappingURL=searchDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchDefaults.js","sourceRoot":"","sources":["../../src/presets/searchDefaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,YAAY,EAAE,EAAE;IAChB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,GAAG;IACb,qBAAqB,EAAE,IAAI;IAC3B,qBAAqB,EAAE,GAAG;IAC1B,mBAAmB,EAAE,GAAG;IACxB,oBAAoB,EAAE,GAAG;CAC1B,CAAC"}
@@ -4,6 +4,12 @@
4
4
  */
5
5
  import { DocsManager } from './docsManager.js';
6
6
  import type { ParsedDoc, SearchOptions, SearchResult } from './types.js';
7
+ /**
8
+ * Resolve the canonical slug for a doc: Docusaurus-style sites route by
9
+ * frontmatter `id` when present, overriding the file-path-derived slug.
10
+ * Returns the path unchanged for missing/non-string ids.
11
+ */
12
+ export declare function resolveDocSlug(path: string, id: unknown): string;
7
13
  export declare class SearchEngine {
8
14
  private docsManager;
9
15
  private embeddingService;
@@ -54,10 +60,6 @@ export declare class SearchEngine {
54
60
  * @returns Parsed document or null if not found
55
61
  */
56
62
  getDocByPath(path: string): Promise<ParsedDoc | null>;
57
- /**
58
- * List all available sections
59
- */
60
- getSections(): string[];
61
63
  /**
62
64
  * Get all documents in a section
63
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"searchEngine.d.ts","sourceRoot":"","sources":["../src/searchEngine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAkB;IAE7C;;;OAGG;gBACS,WAAW,EAAE,WAAW;IAKpC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BzC;;;;;OAKG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IAsB1B;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,cAAc;IA0D5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;;;OAIG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAY3D;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAiB9D"}
1
+ {"version":3,"file":"searchEngine.d.ts","sourceRoot":"","sources":["../src/searchEngine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAYhE;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,mBAAmB,CAAkB;IAE7C;;;OAGG;gBACS,WAAW,EAAE,WAAW;IAKpC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BrC;;;OAGG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BzC;;;;;OAKG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC;IAsB1B;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,cAAc;IA0D5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkCrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;;;OAIG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAS3D;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;CAiB9D"}
@@ -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/.mdx if present)
234
- const normalizedPath = path.replace(/\.mdx?$/, '');
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA+CH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA6RlD"}
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 CHANGED
@@ -10,33 +10,19 @@ import { z } from 'zod';
10
10
  import { DocsManager } from './docsManager.js';
11
11
  import { SearchEngine } from './searchEngine.js';
12
12
  import { summarizeContent, extractStructure } from './summarizer.js';
13
+ import { titleCase } from './markdownParser.js';
13
14
  import CONFIG from './config.js';
14
- function titleCase(section) {
15
- return section
16
- .split(/[-_]/)
17
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
18
- .join(' ');
15
+ function escapeRegExp(literal) {
16
+ return literal.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
19
17
  }
20
18
  /**
21
- * Build the public doc URL for a parsed document. When the active preset's
22
- * docUrl.useFrontmatterId is true, a frontmatter `id` field takes priority
23
- * over the file-path-derived slug (needed for docs sites like Docusaurus
24
- * where `id` can diverge from the file path).
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.
25
23
  */
26
24
  function buildDocUrl(doc) {
27
- let slug = doc.path;
28
- const id = doc.metadata.id;
29
- if (CONFIG.docUrl.useFrontmatterId && id) {
30
- if (id.includes('/')) {
31
- slug = id;
32
- }
33
- else {
34
- const parts = doc.path.split('/');
35
- parts[parts.length - 1] = id;
36
- slug = parts.join('/');
37
- }
38
- }
39
- return `${CONFIG.docUrl.base}/${slug}`;
25
+ return `${CONFIG.docUrl.base}/${doc.path}`;
40
26
  }
41
27
  export async function createServer() {
42
28
  // Initialize components
@@ -55,17 +41,27 @@ export async function createServer() {
55
41
  // Tool input schemas
56
42
  const searchDocsSchema = z.object({
57
43
  query: z.string().describe('Search query string'),
58
- section: z.string().optional().describe(`Filter by section (${CONFIG.sections.join(', ')})`),
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(', ')})`),
59
51
  limit: z.number().min(1).max(CONFIG.search.maxLimit).optional().describe('Maximum number of results'),
60
52
  });
61
53
  const getDocSchema = z.object({
62
- path: z.string().describe('Document path (e.g., "learn/hooks/useState")'),
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'),
63
56
  });
64
- const resourceUriRegex = new RegExp(`^${CONFIG.resourceUriScheme}:\\/\\/(.+)$`);
57
+ const resourceUriRegex = new RegExp(`^${escapeRegExp(CONFIG.resourceUriScheme)}:\\/\\/(.+)$`);
65
58
  // Register list resources handler
66
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);
67
63
  return {
68
- resources: CONFIG.sections.map(section => {
64
+ resources: existingSections.map(section => {
69
65
  const override = CONFIG.sectionResourceOverrides?.[section];
70
66
  return {
71
67
  uri: `${CONFIG.resourceUriScheme}://${section}`,
@@ -155,13 +151,17 @@ export async function createServer() {
155
151
  },
156
152
  {
157
153
  name: 'get_doc',
158
- description: `Get a concise summary of a documentation page (~1500 chars). Use ${CONFIG.searchToolName} first - only call this if you need more detail than the search snippet provides.`,
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.`,
159
155
  inputSchema: {
160
156
  type: 'object',
161
157
  properties: {
162
158
  path: {
163
159
  type: 'string',
164
- description: 'Document path (e.g., "learn/hooks/useState")',
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
165
  },
166
166
  },
167
167
  required: ['path'],
@@ -202,7 +202,7 @@ export async function createServer() {
202
202
  };
203
203
  }
204
204
  case 'list_sections': {
205
- const sections = searchEngine.getSections();
205
+ const sections = await docsManager.getExistingSections(CONFIG.sections);
206
206
  return {
207
207
  content: [
208
208
  {
@@ -213,14 +213,18 @@ export async function createServer() {
213
213
  };
214
214
  }
215
215
  case 'get_doc': {
216
- const { path } = getDocSchema.parse(args);
216
+ const { path, full } = getDocSchema.parse(args);
217
217
  const doc = await searchEngine.getDocByPath(path);
218
218
  if (!doc) {
219
219
  throw new Error(`Document not found: ${path}`);
220
220
  }
221
- // Return concise summary instead of full content
222
- const summary = summarizeContent(doc.content, 1500);
223
- const structure = extractStructure(doc.content);
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
+ };
224
228
  return {
225
229
  content: [
226
230
  {
@@ -230,10 +234,8 @@ export async function createServer() {
230
234
  section: doc.section,
231
235
  title: doc.metadata.title,
232
236
  description: doc.metadata.description,
233
- summary,
234
- structure,
237
+ ...body,
235
238
  url: buildDocUrl(doc),
236
- note: 'This is a summary. Visit the URL for full documentation.',
237
239
  }, null, 2),
238
240
  },
239
241
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
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.1.0",
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",