tailwindcss-docs-mcp 1.0.2 → 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
@@ -5,10 +5,27 @@
5
5
 
6
6
  Local semantic search for Tailwind CSS documentation via [Model Context Protocol](https://modelcontextprotocol.io).
7
7
 
8
- LLMs hallucinate Tailwind classes. This MCP server downloads the docs once, embeds them locally with ONNX, and gives your AI instant semantic search — no API keys, no external services, no per-query costs.
8
+ LLMs hallucinate Tailwind classes. This MCP server downloads the official docs once, embeds them locally with a 22M-parameter ONNX model, and gives your AI assistant instant hybrid search — no API keys, no external services, no per-query costs. Everything runs on your machine.
9
+
10
+ ## Features
11
+
12
+ - **Zero configuration** — install, run, done. No API keys, no Ollama, no database setup.
13
+ - **Hybrid search** — semantic similarity + FTS5 keyword matching, combined with reciprocal rank fusion for consistently relevant results.
14
+ - **Query expansion** — understands Tailwind class names. Searching `text-lg` automatically includes "font size"; `mx-auto` includes "margin".
15
+ - **Tailwind v3 + v4** — full documentation for both major versions, switchable per query.
16
+ - **Fully local embeddings** — `snowflake-arctic-embed-xs` (22M params, 384 dims) runs in-process via ONNX. Nothing leaves your machine.
17
+ - **Incremental indexing** — SHA-256 content hashing per chunk. Only changed content gets re-embedded on refresh.
18
+
19
+ ## Requirements
20
+
21
+ - **Node.js 18+**
22
+
23
+ That's it. No Ollama, no Python, no external services. The embedding model (~27 MB) downloads automatically on first run.
9
24
 
10
25
  ## Installation
11
26
 
27
+ Add to your MCP client configuration:
28
+
12
29
  ```json
13
30
  {
14
31
  "mcpServers": {
@@ -29,6 +46,26 @@ claude mcp add tailwindcss-docs-mcp -- npx -y tailwindcss-docs-mcp
29
46
 
30
47
  </details>
31
48
 
49
+ <details>
50
+ <summary>VS Code</summary>
51
+
52
+ Add to your user or workspace `settings.json`:
53
+
54
+ ```json
55
+ {
56
+ "mcp": {
57
+ "servers": {
58
+ "tailwindcss-docs-mcp": {
59
+ "command": "npx",
60
+ "args": ["-y", "tailwindcss-docs-mcp"]
61
+ }
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
67
+ </details>
68
+
32
69
  <details>
33
70
  <summary>Cursor / Windsurf</summary>
34
71
 
@@ -47,13 +84,34 @@ Add to your project's `.mcp.json`:
47
84
 
48
85
  </details>
49
86
 
50
- ### First run
87
+ <details>
88
+ <summary>Tailwind CSS v3</summary>
89
+
90
+ Set the default version via environment variable:
91
+
92
+ ```json
93
+ {
94
+ "mcpServers": {
95
+ "tailwindcss-docs-mcp": {
96
+ "command": "npx",
97
+ "args": ["-y", "tailwindcss-docs-mcp"],
98
+ "env": {
99
+ "TAILWIND_DOCS_MCP_DEFAULT_VERSION": "v3"
100
+ }
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ </details>
51
107
 
52
- On first boot the embedding model (~27 MB) downloads in the background. The server is usable immediately — tools that need embeddings will return a status message until the model is ready.
108
+ ### Getting started
109
+
110
+ On first boot the embedding model downloads in the background (~30 seconds). The server is usable immediately — tools that need embeddings return a status message until the model is ready.
53
111
 
54
112
  The first time you ask a Tailwind question, your assistant will automatically call `fetch_docs` to download and index the documentation. This happens once — subsequent queries use the local index.
55
113
 
56
- ### Example prompts
114
+ **Example prompts:**
57
115
 
58
116
  - _"How do I center a div with Tailwind?"_
59
117
  - _"Show me the grid layout utilities"_
@@ -62,28 +120,28 @@ The first time you ask a Tailwind question, your assistant will automatically ca
62
120
 
63
121
  ## Tools
64
122
 
65
- ### `fetch_docs`
66
-
67
- Download and index Tailwind CSS documentation. Run once, re-run with `force: true` to refresh.
68
-
69
- | Parameter | Type | Default | Description |
70
- | --------- | --------- | ------- | ---------------------------------- |
71
- | `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
72
- | `force` | `boolean` | `false` | Re-download even if already cached |
73
-
74
123
  ### `search_docs`
75
124
 
76
- Semantic + keyword hybrid search. Returns relevant snippets with code examples and deep links.
125
+ Search indexed documentation using natural language. Returns relevant snippets with code examples and deep links to tailwindcss.com.
77
126
 
78
127
  | Parameter | Type | Default | Description |
79
128
  | --------- | -------- | ------- | ----------------------------- |
80
129
  | `query` | `string` | — | Natural language search query |
81
130
  | `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
82
- | `limit` | `number` | `5` | Results to return (120) |
131
+ | `limit` | `number` | `5` | Results to return (1-20) |
132
+
133
+ ### `fetch_docs`
134
+
135
+ Download and index Tailwind CSS documentation. Run once per version. Re-run with `force: true` to refresh after Tailwind releases.
136
+
137
+ | Parameter | Type | Default | Description |
138
+ | --------- | --------- | ------- | ---------------------------------- |
139
+ | `version` | `string` | `"v4"` | `"v3"` or `"v4"` |
140
+ | `force` | `boolean` | `false` | Re-download even if already cached |
83
141
 
84
142
  ### `list_utilities`
85
143
 
86
- Browse all utility categories (Layout, Spacing, Typography, etc.).
144
+ Browse all utility categories (Layout, Spacing, Typography, Flexbox & Grid, etc.).
87
145
 
88
146
  | Parameter | Type | Default | Description |
89
147
  | ---------- | -------- | ------- | ----------------------- |
@@ -92,52 +150,42 @@ Browse all utility categories (Layout, Spacing, Typography, etc.).
92
150
 
93
151
  ### `check_status`
94
152
 
95
- Check index state — doc counts, embedding model status, last indexed time.
153
+ Check index state — document counts, embedding model status, and last indexed time.
96
154
 
97
155
  | Parameter | Type | Default | Description |
98
156
  | --------- | -------- | ------- | --------------------------------------- |
99
157
  | `version` | `string` | — | Check specific version, or omit for all |
100
158
 
101
- ## How It Works
159
+ ## How it works
102
160
 
103
161
  ```
104
- GitHub → Fetch MDX Parse Chunk by heading Embed (ONNX) SQLite
105
-
106
- search_docs → Hybrid Search
107
- Semantic + FTS5
108
- Rank Fusion
162
+ GitHub MDX ─→ Parse ─→ Chunk by heading ─→ Embed (ONNX) ─→ SQLite
163
+
164
+ search_docs ◄───┘
165
+ ├─ Semantic: cosine similarity
166
+ ├─ Keyword: FTS5 full-text
167
+ └─ Reciprocal rank fusion
109
168
  ```
110
169
 
111
- - **Hybrid search** — cosine similarity on embeddings + FTS5 keyword match, fused via reciprocal rank fusion. Semantic handles _"how to center a div"_, keywords handle exact classes like `grid-cols-3`.
112
- - **Incremental re-indexing** — SHA-256 content hashing per chunk. Unchanged content skips re-embedding.
113
- - **In-process embeddings** — `snowflake-arctic-embed-xs` (22M params, 384 dims) runs locally via ONNX. No external calls.
114
- - **Auto model management** — the embedding model (~27 MB) downloads on first boot and caches locally. Server starts immediately; model loads in background.
170
+ 1. **Fetch** — downloads MDX source files from the `tailwindcss.com` GitHub repo (v3: `master` branch, v4: `next` branch).
171
+ 2. **Chunk** — splits documents by heading hierarchy (`##` → `###` → paragraphs), keeping code blocks intact. ~500 tokens per chunk.
172
+ 3. **Embed** — generates 384-dim vectors using `snowflake-arctic-embed-xs` running locally via ONNX. No external API calls.
173
+ 4. **Search** — runs semantic similarity and FTS5 keyword search in parallel, merges results with reciprocal rank fusion. Class-name queries get boosted keyword weight.
115
174
 
116
175
  ## Configuration
117
176
 
118
- | Variable | Default | Description |
119
- | ----------------------------------- | ------------------------- | ------------------------------------- |
120
- | `TAILWIND_DOCS_MCP_DEFAULT_VERSION` | `v4` | Set to `v3` for Tailwind 3.x projects |
121
- | `TAILWIND_DOCS_MCP_PATH` | `~/.tailwindcss-docs-mcp` | Data directory |
177
+ | Variable | Default | Description |
178
+ | ----------------------------------- | ------------------------- | -------------------------------------- |
179
+ | `TAILWIND_DOCS_MCP_DEFAULT_VERSION` | `v4` | Default Tailwind version for all tools |
180
+ | `TAILWIND_DOCS_MCP_PATH` | `~/.tailwindcss-docs-mcp` | Data directory (database + cache) |
122
181
 
123
- <details>
124
- <summary>Using with Tailwind CSS v3</summary>
182
+ ## Troubleshooting
125
183
 
126
- ```json
127
- {
128
- "mcpServers": {
129
- "tailwindcss-docs-mcp": {
130
- "command": "npx",
131
- "args": ["-y", "tailwindcss-docs-mcp"],
132
- "env": {
133
- "TAILWIND_DOCS_MCP_DEFAULT_VERSION": "v3"
134
- }
135
- }
136
- }
137
- }
138
- ```
184
+ **"Embedding model is initializing"** — The ONNX model (~27 MB) is still downloading. Wait ~30 seconds and try again, or use `check_status` to monitor progress.
139
185
 
140
- </details>
186
+ **"Index not built for this version"** — Documentation hasn't been fetched yet. Ask your assistant _"Fetch the Tailwind CSS v4 docs"_ or call `fetch_docs` directly.
187
+
188
+ **Getting v3 results when you expect v4** — Set the default version in your MCP config (see [Tailwind CSS v3](#installation) above) or pass `version: "v4"` explicitly in your query.
141
189
 
142
190
  ## Development
143
191
 
@@ -145,14 +193,19 @@ GitHub → Fetch MDX → Parse → Chunk by heading → Embed (ONNX) → SQLite
145
193
  git clone https://github.com/vitalis/tailwindcss-docs-mcp.git
146
194
  cd tailwindcss-docs-mcp
147
195
  bun install
148
- bun run test # Vitest
149
- bun run build # TypeScript
150
- bunx biome check src/ test/ # Lint
196
+
197
+ bun run test # Run tests (Vitest)
198
+ bun run build # TypeScript type check
199
+ bunx biome check src/ test/ # Lint + format check
151
200
  ```
152
201
 
202
+ ## Contributing
203
+
204
+ Contributions are welcome! Please open an [issue](https://github.com/vitalis/tailwindcss-docs-mcp/issues) to discuss what you'd like to change before submitting a pull request.
205
+
153
206
  ## Acknowledgments
154
207
 
155
- Inspired by [HexDocs MCP](https://github.com/bradleygolden/hexdocs-mcp), which does the same for Elixir/Hex documentation.
208
+ Inspired by [HexDocs MCP](https://github.com/bradleygolden/hexdocs-mcp), which provides the same semantic search experience for Elixir/Hex documentation.
156
209
 
157
210
  ## License
158
211
 
@@ -0,0 +1,21 @@
1
+ import type { Embedder } from "./pipeline/embedder.js";
2
+ import type { Database } from "./storage/database.js";
3
+ import type { Config } from "./utils/config.js";
4
+ /**
5
+ * Callbacks for auto-index lifecycle events.
6
+ */
7
+ export interface AutoIndexCallbacks {
8
+ onStart: () => void;
9
+ onComplete: () => void;
10
+ onError: (error: unknown) => void;
11
+ }
12
+ /**
13
+ * Auto-index the default Tailwind CSS version if not already indexed.
14
+ *
15
+ * Checks the database for an existing index. If found, calls onComplete
16
+ * immediately. Otherwise, triggers handleFetchDocs in the background.
17
+ *
18
+ * Reuses handleFetchDocs which has its own mutex for concurrent-call safety.
19
+ */
20
+ export declare function maybeAutoIndex(config: Config, db: Database, embedder: Embedder, callbacks: AutoIndexCallbacks): Promise<void>;
21
+ //# sourceMappingURL=auto-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-index.d.ts","sourceRoot":"","sources":["../src/auto-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf"}
@@ -0,0 +1,27 @@
1
+ import { handleFetchDocs } from "./tools/fetch-docs.js";
2
+ /**
3
+ * Auto-index the default Tailwind CSS version if not already indexed.
4
+ *
5
+ * Checks the database for an existing index. If found, calls onComplete
6
+ * immediately. Otherwise, triggers handleFetchDocs in the background.
7
+ *
8
+ * Reuses handleFetchDocs which has its own mutex for concurrent-call safety.
9
+ */
10
+ export async function maybeAutoIndex(config, db, embedder, callbacks) {
11
+ const version = config.defaultVersion;
12
+ // Skip if already indexed
13
+ const status = db.getIndexStatus(version);
14
+ if (status.length > 0) {
15
+ callbacks.onComplete();
16
+ return;
17
+ }
18
+ callbacks.onStart();
19
+ try {
20
+ await handleFetchDocs({ version }, config, db, embedder);
21
+ callbacks.onComplete();
22
+ }
23
+ catch (error) {
24
+ callbacks.onError(error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=auto-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-index.js","sourceRoot":"","sources":["../src/auto-index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,EAAY,EACZ,QAAkB,EAClB,SAA6B;IAE7B,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;IAEtC,0BAA0B;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,SAAS,CAAC,OAAO,EAAE,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,SAAS,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@
11
11
  * - Success: server is fully operational, check for updates in background
12
12
  * - Failure: download model in background, server tools fail until ready
13
13
  * 3. Background update/download completes — embedder is hot-swapped immediately
14
+ * 4. Auto-index default version if not already indexed
14
15
  */
15
16
  export {};
16
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
package/dist/index.js CHANGED
@@ -11,8 +11,10 @@
11
11
  * - Success: server is fully operational, check for updates in background
12
12
  * - Failure: download model in background, server tools fail until ready
13
13
  * 3. Background update/download completes — embedder is hot-swapped immediately
14
+ * 4. Auto-index default version if not already indexed
14
15
  */
15
16
  import { mkdirSync } from "node:fs";
17
+ import { maybeAutoIndex } from "./auto-index.js";
16
18
  import { createEmbedder, loadCachedEmbedder } from "./pipeline/embedder.js";
17
19
  import { createServer } from "./server.js";
18
20
  import { createDatabase } from "./storage/database.js";
@@ -29,12 +31,30 @@ async function main() {
29
31
  });
30
32
  // Start MCP server immediately (embedder loads in background)
31
33
  const server = await createServer({ config, db, embedder: null });
34
+ // Auto-index helper: fire-and-forget after embedder is ready
35
+ function triggerAutoIndex(e) {
36
+ maybeAutoIndex(config, db, e, {
37
+ onStart: () => {
38
+ server.setIndexingStatus("indexing");
39
+ console.error("[tailwindcss-docs-mcp] Auto-indexing documentation...");
40
+ },
41
+ onComplete: () => {
42
+ server.setIndexingStatus("complete");
43
+ console.error("[tailwindcss-docs-mcp] Documentation index ready.");
44
+ },
45
+ onError: (error) => {
46
+ server.setIndexingStatus("failed");
47
+ console.error("[tailwindcss-docs-mcp] Auto-indexing failed:", error);
48
+ },
49
+ });
50
+ }
32
51
  // Phase 1: Try local cache (fast, no network)
33
52
  const cached = await loadCachedEmbedder(config);
34
53
  if (cached) {
35
54
  // Model loaded from cache — server is fully operational
36
55
  server.setEmbedder(cached);
37
56
  console.error("[tailwindcss-docs-mcp] Embedding model loaded from cache.");
57
+ triggerAutoIndex(cached);
38
58
  // Phase 2: Check for model updates in background, hot-swap if updated
39
59
  createEmbedder(config)
40
60
  .then((updated) => {
@@ -53,6 +73,7 @@ async function main() {
53
73
  .then((embedder) => {
54
74
  server.setEmbedder(embedder);
55
75
  console.error("[tailwindcss-docs-mcp] Embedding model downloaded and ready.");
76
+ triggerAutoIndex(embedder);
56
77
  })
57
78
  .catch((error) => {
58
79
  server.setEmbedderStatus("failed");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,+BAA+B;IAC/B,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAExC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,8CAA8C;IAC9C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,MAAM,EAAE,CAAC;QACX,wDAAwD;QACxD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAE3E,sEAAsE;QACtE,cAAc,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAC;QACF,cAAc,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAChF,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,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;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,+BAA+B;IAC/B,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAExC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,6DAA6D;IAC7D,SAAS,gBAAgB,CAAC,CAAW;QACnC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5B,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACzE,CAAC;YACD,UAAU,EAAE,GAAG,EAAE;gBACf,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC1B,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,8CAA8C;IAC9C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,MAAM,EAAE,CAAC;QACX,wDAAwD;QACxD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC3E,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEzB,sEAAsE;QACtE,cAAc,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACvE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACN,4CAA4C;QAC5C,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CACX,iFAAiF,CAClF,CAAC;QACF,cAAc,CAAC,MAAM,CAAC;aACnB,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YAC9E,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,4DAA4D,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/server.d.ts CHANGED
@@ -15,6 +15,10 @@ export declare const TOOL_NAMES: {
15
15
  * Embedder loading status for observability.
16
16
  */
17
17
  export type EmbedderStatus = "pending" | "downloading" | "ready" | "failed";
18
+ /**
19
+ * Documentation indexing status for observability.
20
+ */
21
+ export type IndexingStatus = "idle" | "indexing" | "complete" | "failed";
18
22
  /**
19
23
  * Server dependencies injected at startup.
20
24
  * Embedder may be null if the model is still downloading.
@@ -34,6 +38,10 @@ export interface ServerHandle {
34
38
  setEmbedderStatus(status: EmbedderStatus): void;
35
39
  /** Get the current embedder loading status. */
36
40
  getEmbedderStatus(): EmbedderStatus;
41
+ /** Update the indexing status for observability. */
42
+ setIndexingStatus(status: IndexingStatus): void;
43
+ /** Get the current indexing status. */
44
+ getIndexingStatus(): IndexingStatus;
37
45
  }
38
46
  export declare const EMBEDDER_STATUS_MESSAGES: Record<EmbedderStatus, string>;
39
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,4DAA4D;IAC5D,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,+CAA+C;IAC/C,iBAAiB,IAAI,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAyIjG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzE;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,4DAA4D;IAC5D,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,+CAA+C;IAC/C,iBAAiB,IAAI,cAAc,CAAC;IACpC,oDAAoD;IACpD,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAChD,uCAAuC;IACvC,iBAAiB,IAAI,cAAc,CAAC;CACrC;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAKnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAgJjG"}
package/dist/server.js CHANGED
@@ -33,6 +33,7 @@ export async function createServer(deps, transport) {
33
33
  const { config, db } = deps;
34
34
  let embedder = deps.embedder;
35
35
  let embedderStatus = deps.embedder ? "ready" : "pending";
36
+ let indexingStatus = "idle";
36
37
  function requireEmbedder() {
37
38
  if (!embedder) {
38
39
  throw new Error(EMBEDDER_STATUS_MESSAGES[embedderStatus]);
@@ -51,7 +52,7 @@ export async function createServer(deps, transport) {
51
52
  version: SERVER_VERSION,
52
53
  });
53
54
  // Register fetch_docs
54
- server.tool(TOOL_NAMES.FETCH_DOCS, "Download and index Tailwind CSS documentation for local semantic search. Only needs to be run once per version. Re-run with force=true to refresh.", {
55
+ server.tool(TOOL_NAMES.FETCH_DOCS, "Re-index Tailwind CSS documentation. Docs are indexed automatically on first start. Use this to force refresh after a new Tailwind release, or to index a different version.", {
55
56
  version: z.enum(["v4", "v3"]).optional().describe("Tailwind CSS major version (default: v4)"),
56
57
  force: z
57
58
  .boolean()
@@ -67,7 +68,7 @@ export async function createServer(deps, transport) {
67
68
  }
68
69
  });
69
70
  // Register search_docs
70
- server.tool(TOOL_NAMES.SEARCH_DOCS, "Search Tailwind CSS documentation using natural language. Returns the most relevant documentation snippets with code examples. Requires fetch_docs to be run first.", {
71
+ server.tool(TOOL_NAMES.SEARCH_DOCS, "Search Tailwind CSS documentation using natural language. Returns the most relevant documentation snippets with code examples.", {
71
72
  query: z
72
73
  .string()
73
74
  .describe("Natural language search query (e.g., 'how to add responsive padding', 'dark mode configuration', 'grid layout with gaps')"),
@@ -84,7 +85,7 @@ export async function createServer(deps, transport) {
84
85
  }, async (params) => {
85
86
  try {
86
87
  const result = await handleSearchDocs(params, db, requireEmbedder(), config.defaultVersion);
87
- const text = formatSearchResults(result);
88
+ const text = formatSearchResults(result, indexingStatus);
88
89
  return { content: [{ type: "text", text }] };
89
90
  }
90
91
  catch (error) {
@@ -116,7 +117,7 @@ export async function createServer(deps, transport) {
116
117
  .describe("Check specific version (v3 or v4). Omit to check all."),
117
118
  }, (params) => {
118
119
  try {
119
- const result = handleCheckStatus(params, db, embedderStatus);
120
+ const result = handleCheckStatus(params, db, embedderStatus, indexingStatus);
120
121
  return { content: [{ type: "text", text: result.message }] };
121
122
  }
122
123
  catch (error) {
@@ -136,6 +137,12 @@ export async function createServer(deps, transport) {
136
137
  getEmbedderStatus() {
137
138
  return embedderStatus;
138
139
  },
140
+ setIndexingStatus(status) {
141
+ indexingStatus = status;
142
+ },
143
+ getIndexingStatus() {
144
+ return indexingStatus;
145
+ },
139
146
  };
140
147
  }
141
148
  //# sourceMappingURL=server.js.map
@@ -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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"}
@@ -1,4 +1,4 @@
1
- import type { EmbedderStatus } from "../server.js";
1
+ import type { EmbedderStatus, IndexingStatus } from "../server.js";
2
2
  import type { Database, IndexStatus } from "../storage/database.js";
3
3
  import type { TailwindVersion } from "../utils/config.js";
4
4
  /**
@@ -27,9 +27,9 @@ export interface CheckStatusResult {
27
27
  * Reports the current index state without triggering any work.
28
28
  * Returns doc/chunk counts, embedding model used, and last indexed timestamp.
29
29
  */
30
- export declare function handleCheckStatus(input: CheckStatusInput, db: Database, embedderStatus: EmbedderStatus): CheckStatusResult;
30
+ export declare function handleCheckStatus(input: CheckStatusInput, db: Database, embedderStatus: EmbedderStatus, indexingStatus?: IndexingStatus): CheckStatusResult;
31
31
  /**
32
32
  * Format the status as markdown for LLM consumption.
33
33
  */
34
- export declare function formatStatus(indexed: boolean, versions: IndexStatus[], embedderStatus: EmbedderStatus): string;
34
+ export declare function formatStatus(indexed: boolean, versions: IndexStatus[], embedderStatus: EmbedderStatus, indexingStatus?: IndexingStatus): string;
35
35
  //# sourceMappingURL=check-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check-status.d.ts","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,sCAAsC;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,QAAQ,EACZ,cAAc,EAAE,cAAc,GAC7B,iBAAiB,CAOnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,cAAc,EAAE,cAAc,GAC7B,MAAM,CA2BR"}
1
+ {"version":3,"file":"check-status.d.ts","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,sCAAsC;IACtC,cAAc,EAAE,cAAc,CAAC;IAC/B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,EACvB,EAAE,EAAE,QAAQ,EACZ,cAAc,EAAE,cAAc,EAC9B,cAAc,CAAC,EAAE,cAAc,GAC9B,iBAAiB,CAOnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,cAAc,EAAE,cAAc,EAC9B,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CAiCR"}
@@ -4,16 +4,16 @@
4
4
  * Reports the current index state without triggering any work.
5
5
  * Returns doc/chunk counts, embedding model used, and last indexed timestamp.
6
6
  */
7
- export function handleCheckStatus(input, db, embedderStatus) {
7
+ export function handleCheckStatus(input, db, embedderStatus, indexingStatus) {
8
8
  const versions = db.getIndexStatus(input.version);
9
9
  const indexed = versions.length > 0;
10
- const message = formatStatus(indexed, versions, embedderStatus);
10
+ const message = formatStatus(indexed, versions, embedderStatus, indexingStatus);
11
11
  return { indexed, versions, embedderStatus, message };
12
12
  }
13
13
  /**
14
14
  * Format the status as markdown for LLM consumption.
15
15
  */
16
- export function formatStatus(indexed, versions, embedderStatus) {
16
+ export function formatStatus(indexed, versions, embedderStatus, indexingStatus) {
17
17
  const lines = ["# Tailwind CSS Documentation Index Status\n"];
18
18
  // Embedding model status
19
19
  const statusLabels = {
@@ -24,7 +24,15 @@ export function formatStatus(indexed, versions, embedderStatus) {
24
24
  };
25
25
  lines.push(`**Embedding model**: ${statusLabels[embedderStatus]}\n`);
26
26
  if (!indexed) {
27
- lines.push("Not indexed. Run fetch_docs to index Tailwind CSS documentation.");
27
+ if (indexingStatus === "indexing") {
28
+ lines.push("Auto-indexing in progress. This takes 1-2 minutes on first run.");
29
+ }
30
+ else if (indexingStatus === "failed") {
31
+ lines.push("Auto-indexing failed. Run fetch_docs to index manually.");
32
+ }
33
+ else {
34
+ lines.push("Not indexed. Run fetch_docs to index Tailwind CSS documentation.");
35
+ }
28
36
  return lines.join("\n");
29
37
  }
30
38
  for (const v of versions) {
@@ -1 +1 @@
1
- {"version":3,"file":"check-status.js","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AA0BA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,EAAY,EACZ,cAA8B;IAE9B,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEhE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,QAAuB,EACvB,cAA8B;IAE9B,MAAM,KAAK,GAAa,CAAC,6CAA6C,CAAC,CAAC;IAExE,yBAAyB;IACzB,MAAM,YAAY,GAAmC;QACnD,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,gBAAgB;KACzB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,oBAAoB,cAAc,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"check-status.js","sourceRoot":"","sources":["../../src/tools/check-status.ts"],"names":[],"mappings":"AA0BA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAuB,EACvB,EAAY,EACZ,cAA8B,EAC9B,cAA+B;IAE/B,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAEhF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,QAAuB,EACvB,cAA8B,EAC9B,cAA+B;IAE/B,MAAM,KAAK,GAAa,CAAC,6CAA6C,CAAC,CAAC;IAExE,yBAAyB;IACzB,MAAM,YAAY,GAAmC;QACnD,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,sBAAsB;QACnC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,gBAAgB;KACzB,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,wBAAwB,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,oBAAoB,cAAc,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Embedder } from "../pipeline/embedder.js";
2
+ import type { IndexingStatus } from "../server.js";
2
3
  import type { Database } from "../storage/database.js";
3
4
  import { type SearchResult } from "../storage/search.js";
4
5
  import type { TailwindVersion } from "../utils/config.js";
@@ -40,5 +41,5 @@ export declare function handleSearchDocs(input: SearchDocsInput, db: Database, e
40
41
  * - Content snippet
41
42
  * - Deep link to tailwindcss.com
42
43
  */
43
- export declare function formatSearchResults(result: SearchDocsResult): string;
44
+ export declare function formatSearchResults(result: SearchDocsResult, indexingStatus?: IndexingStatus): string;
44
45
  //# sourceMappingURL=search-docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-docs.d.ts","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAoBpE"}
1
+ {"version":3,"file":"search-docs.d.ts","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,QAAQ,EACZ,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,EACxB,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CA0BR"}
@@ -33,9 +33,15 @@ export async function handleSearchDocs(input, db, embedder, defaultVersion) {
33
33
  * - Content snippet
34
34
  * - Deep link to tailwindcss.com
35
35
  */
36
- export function formatSearchResults(result) {
36
+ export function formatSearchResults(result, indexingStatus) {
37
37
  if (result.notIndexed) {
38
- return "Index not built for this version. Run fetch_docs first.";
38
+ if (indexingStatus === "indexing") {
39
+ return "Documentation is being indexed automatically. This takes 1-2 minutes on first run. Please wait a moment and try again.";
40
+ }
41
+ if (indexingStatus === "failed") {
42
+ return "Auto-indexing failed. Run fetch_docs to index manually.";
43
+ }
44
+ return "Index not built for this version. Run fetch_docs to index.";
39
45
  }
40
46
  if (result.results.length === 0) {
41
47
  return "No results found for this query.";
@@ -1 +1 @@
1
- {"version":3,"file":"search-docs.js","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAuBvE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,EAAY,EACZ,QAAkB,EAClB,cAA+B;IAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1D,wBAAwB;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC/C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO;QACP,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC1D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,yDAAyD,CAAC;IACnE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"search-docs.js","sourceRoot":"","sources":["../../src/tools/search-docs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAuBvE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAsB,EACtB,EAAY,EACZ,QAAkB,EAClB,cAA+B;IAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1D,wBAAwB;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE;QAC/C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO;QACP,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAwB,EACxB,cAA+B;IAE/B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;YAClC,OAAO,wHAAwH,CAAC;QAClI,CAAC;QACD,IAAI,cAAc,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,yDAAyD,CAAC;QACnE,CAAC;QACD,OAAO,4DAA4D,CAAC;IACtE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailwindcss-docs-mcp",
3
- "version": "1.0.2",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "description": "Local semantic search for Tailwind CSS documentation via Model Context Protocol",
6
6
  "license": "MIT",