@groundtruth-mcp/gt-mcp 2.4.0 → 2.5.1
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 +156 -53
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/index.js +1 -1
- package/dist/services/cache.js +1 -1
- package/dist/services/fetcher.d.ts +12 -1
- package/dist/services/fetcher.js +1 -1
- package/dist/sources/registry.js +1 -1
- package/dist/tools/audit.js +1 -1
- package/dist/tools/auto-scan.js +1 -1
- package/dist/tools/best-practices.js +1 -1
- package/dist/tools/changelog.js +1 -1
- package/dist/tools/compare.js +1 -1
- package/dist/tools/compat.js +1 -1
- package/dist/tools/docs.js +1 -1
- package/dist/tools/examples.d.ts +2 -0
- package/dist/tools/examples.js +1 -0
- package/dist/tools/resolve.js +1 -1
- package/dist/tools/search.js +1 -1
- package/dist/types.d.ts +4 -1
- package/dist/utils/extract.js +1 -1
- package/dist/utils/guard.js +1 -1
- package/dist/utils/lockfile.d.ts +7 -0
- package/dist/utils/lockfile.js +1 -0
- package/dist/utils/sanitize.js +1 -1
- package/dist/utils/version-check.d.ts +6 -0
- package/dist/utils/version-check.js +1 -0
- package/dist/utils/watermark.js +1 -1
- package/package.json +14 -3
package/README.md
CHANGED
|
@@ -1,37 +1,45 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</
|
|
1
|
+
<div align="center">
|
|
2
|
+
<table><tr><td>
|
|
3
|
+
<pre>
|
|
4
|
+
██████╗ ████████╗ ███╗ ███╗ ██████╗ ██████╗
|
|
5
|
+
██╔════╝ ╚══██╔══╝ ████╗ ████║ ██╔════╝ ██╔══██╗
|
|
6
|
+
██║ ███╗ ██║ ██╔████╔██║ ██║ ██████╔╝
|
|
7
|
+
██║ ██║ ██║ ██║╚██╔╝██║ ██║ ██╔═══╝
|
|
8
|
+
╚██████╔╝ ██║ ██║ ╚═╝ ██║ ╚██████╗ ██║
|
|
9
|
+
</pre>
|
|
10
|
+
</td></tr></table>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<h3 align="center">Your AI assistant just mass-produced deprecated code again.<br/>You merged it because the formatting was clean.<br/><br/>GroundTruth fixes that.</h3>
|
|
11
14
|
|
|
12
15
|
<p align="center">
|
|
13
16
|
<a href="https://www.npmjs.com/package/@groundtruth-mcp/gt-mcp"><img src="https://img.shields.io/npm/v/@groundtruth-mcp/gt-mcp?color=00d4aa&label=npm" alt="npm version" /></a>
|
|
14
17
|
<a href="https://github.com/rm-rf-prod/GroundTruth-MCP/actions/workflows/ci.yml"><img src="https://github.com/rm-rf-prod/GroundTruth-MCP/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
|
|
15
18
|
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-ELv2-orange" alt="Elastic License 2.0" /></a>
|
|
16
|
-
<img src="https://img.shields.io/badge/libraries-363%2B-teal" alt="
|
|
19
|
+
<img src="https://img.shields.io/badge/libraries-363%2B-teal" alt="Unlimited libraries" />
|
|
17
20
|
<img src="https://img.shields.io/badge/audit_patterns-100%2B-red" alt="100+ audit patterns" />
|
|
18
|
-
<img src="https://img.shields.io/badge/tests-
|
|
21
|
+
<img src="https://img.shields.io/badge/tests-704-brightgreen" alt="704 tests" />
|
|
19
22
|
<img src="https://img.shields.io/badge/node-%3E%3D24-green" alt="Node 24+" />
|
|
23
|
+
<img src="https://img.shields.io/badge/status-active%20development-blue" alt="Active Development" />
|
|
20
24
|
</p>
|
|
21
25
|
|
|
26
|
+
<h4 align="center">Self-hosted MCP server. 363+ curated libraries. 100+ audit patterns. No rate limits. No API keys.<br/>Ships updates continuously — your MCP client picks them up on restart.</h4>
|
|
27
|
+
|
|
22
28
|
---
|
|
23
29
|
|
|
24
|
-
## The problem
|
|
30
|
+
## The problem (it's you, but also the model)
|
|
31
|
+
|
|
32
|
+
Your AI assistant just mass-produced seven files of deprecated code and you merged all of it because the formatting was nice and the variable names were clean. We've all been there. Some of us are still there. Some of us are in production there.
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
Here's what happened: React shipped v19 and killed `forwardRef`. Next.js made `cookies()` async. Tailwind moved to v4 and nuked `@tailwind` directives. Your model didn't get the memo. It's still writing patterns from the before times with absolute confidence and zero hesitation.
|
|
27
35
|
|
|
28
|
-
|
|
36
|
+
And the security stuff — that's the part that should keep you up at night but doesn't because you don't know about it yet. The model will hand you SQL injection dressed up as a query builder, pass user input to `innerHTML` like it's a feature, and use `any` in TypeScript with the same energy as someone who puts ketchup on steak. It learned from real code. Real code that real people got real fired over.
|
|
29
37
|
|
|
30
|
-
Context7
|
|
38
|
+
Context7 is one solution. Cloud-hosted. Rate-limited. Covers about 130 libraries. Works great until you burn through the quota at 11pm debugging a production outage and it serves you a 429 while your Slack is lighting up.
|
|
31
39
|
|
|
32
|
-
**GroundTruth runs on your machine.**
|
|
40
|
+
**GroundTruth runs on your machine.** No quota to hit. No cloud to go down. Fetches docs from the source — `llms.txt`, Jina Reader, GitHub — right when you ask. 363+ curated libraries, plus npm, PyPI, crates.io, and pkg.go.dev as fallback. Any public package. Any ecosystem.
|
|
33
41
|
|
|
34
|
-
The audit tool
|
|
42
|
+
The audit tool reads your actual files, finds issues at exact `file:line` locations, and fetches the current fix from the real spec. Not a Medium article. Not a 2019 ESLint plugin. The OWASP cheat sheet that was updated last month.
|
|
35
43
|
|
|
36
44
|
---
|
|
37
45
|
|
|
@@ -64,11 +72,21 @@ Add to your MCP config (`claude_desktop_config.json`, `.cursor/mcp.json`, or `.v
|
|
|
64
72
|
}
|
|
65
73
|
```
|
|
66
74
|
|
|
67
|
-
No build step. No config file. Node.js 24+. npx pulls the
|
|
75
|
+
No build step. No config file. Node.js 24+. Using `@latest` means npx pulls the newest version on every session start automatically — you always get the latest libraries, audit patterns, and fixes without doing anything.
|
|
76
|
+
|
|
77
|
+
### Automatic updates
|
|
78
|
+
|
|
79
|
+
GroundTruth checks npm for new versions on every startup. If a newer version exists, you get a notification:
|
|
80
|
+
|
|
81
|
+
- **stderr log** — visible in your MCP client's server output
|
|
82
|
+
- **MCP logging message** — surfaces in clients that support MCP log notifications
|
|
83
|
+
- **Tool response footer** — appended to every tool response until you restart with the latest version
|
|
84
|
+
|
|
85
|
+
Since the install uses `npx -y @groundtruth-mcp/gt-mcp@latest`, restarting your MCP client (or starting a new session) is enough to get the update. No manual `npm update` needed.
|
|
68
86
|
|
|
69
87
|
### Optional: GitHub token
|
|
70
88
|
|
|
71
|
-
GroundTruth fetches README files, release notes,
|
|
89
|
+
GroundTruth fetches README files, release notes, migration guides, and code examples from GitHub. Unauthenticated requests are rate-limited to 60/hr. If you build anything with more than a couple dependencies, you'll hit that by lunch.
|
|
72
90
|
|
|
73
91
|
```bash
|
|
74
92
|
# Claude Code
|
|
@@ -92,19 +110,20 @@ A token with no extra scopes (public repo read) is enough. Takes the limit from
|
|
|
92
110
|
|
|
93
111
|
## Tools
|
|
94
112
|
|
|
95
|
-
|
|
113
|
+
Ten tools. Each does one thing and stops there.
|
|
96
114
|
|
|
97
115
|
| Tool | What it does |
|
|
98
116
|
|---|---|
|
|
99
|
-
| `gt_resolve_library` | Find a library by name — gets the registry entry and docs URL |
|
|
117
|
+
| `gt_resolve_library` | Find a library by name — gets the registry entry and docs URL. Falls back to npm, PyPI, crates.io, and pkg.go.dev |
|
|
100
118
|
| `gt_get_docs` | Fetch live docs for a specific topic (not whatever was cached six months ago) |
|
|
101
119
|
| `gt_best_practices` | Get patterns, anti-patterns, and config guidance for any library |
|
|
102
|
-
| `gt_auto_scan` | Read `package.json` / `requirements.txt`, fetch best practices for everything in it |
|
|
120
|
+
| `gt_auto_scan` | Read `package.json` / `requirements.txt`, detect lockfile versions, fetch best practices for everything in it |
|
|
103
121
|
| `gt_search` | Search OWASP, MDN, web.dev, W3C, official language docs, and AI provider docs |
|
|
104
122
|
| `gt_audit` | Scan your source files — finds real issues at exact `file:line` with live fixes attached |
|
|
105
123
|
| `gt_changelog` | Fetch release notes before you run `npm update` and regret it |
|
|
106
124
|
| `gt_compat` | Check browser and runtime compatibility — before Safari breaks your launch |
|
|
107
|
-
| `gt_compare` | Compare 2
|
|
125
|
+
| `gt_compare` | Compare 2-3 libraries side-by-side so you can finally pick one and move on |
|
|
126
|
+
| `gt_examples` | Search GitHub for real-world code examples of any library or usage pattern |
|
|
108
127
|
|
|
109
128
|
---
|
|
110
129
|
|
|
@@ -148,7 +167,7 @@ gt_audit({ categories: ["typescript", "react"] }) // type safety + React ru
|
|
|
148
167
|
gt_audit({
|
|
149
168
|
projectPath: "./src", // defaults to cwd
|
|
150
169
|
categories: ["security"], // or "all" (default)
|
|
151
|
-
maxFiles: 100, // 1
|
|
170
|
+
maxFiles: 100, // 1-200, default 50
|
|
152
171
|
tokens: 6000, // max tokens per docs fetch, default 4000
|
|
153
172
|
})
|
|
154
173
|
```
|
|
@@ -207,7 +226,7 @@ gt_compat({ feature: "CSS :has() selector", environments: ["safari", "firefox"]
|
|
|
207
226
|
|
|
208
227
|
## `gt_compare` — pick one already
|
|
209
228
|
|
|
210
|
-
Side-by-side comparison of 2
|
|
229
|
+
Side-by-side comparison of 2-3 libraries. Fetches live docs for each and filters to content relevant to your criteria. Useful for the "prisma vs drizzle" debate you've been having with yourself for three weeks while using neither.
|
|
211
230
|
|
|
212
231
|
```
|
|
213
232
|
gt_compare({ libraries: ["prisma", "drizzle-orm"] })
|
|
@@ -218,9 +237,24 @@ gt_compare({ libraries: ["react", "solid-js"], criteria: "performance rendering"
|
|
|
218
237
|
|
|
219
238
|
---
|
|
220
239
|
|
|
240
|
+
## `gt_examples` — see how other people actually use it
|
|
241
|
+
|
|
242
|
+
Searches GitHub for real-world usage examples of any library or pattern. Returns code snippets from popular open-source projects with file paths and repository attribution. Useful when the docs tell you what an API does but not how anyone actually uses it in production.
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
gt_examples({ library: "drizzle-orm" })
|
|
246
|
+
gt_examples({ library: "tanstack/query", pattern: "useMutation" })
|
|
247
|
+
gt_examples({ library: "fastapi", pattern: "middleware", language: "python" })
|
|
248
|
+
gt_examples({ library: "hono", pattern: "auth guard", maxResults: 10 })
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Requires `GT_GITHUB_TOKEN` for higher rate limits. Without a token, GitHub Code Search allows 10 requests per minute.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
221
255
|
## `gt_search` — anything that isn't a specific library
|
|
222
256
|
|
|
223
|
-
For questions not tied to a particular package. Pulls from OWASP, MDN, web.dev, W3C, official language docs, AI provider docs, and everything else in the topic map below. Good for when you know what you need but not which library page it lives on.
|
|
257
|
+
For questions not tied to a particular package. Pulls from OWASP, MDN, web.dev, W3C, official language docs, AI provider docs, Google developer docs, and everything else in the topic map below. Good for when you know what you need but not which library page it lives on.
|
|
224
258
|
|
|
225
259
|
```
|
|
226
260
|
gt_search({ query: "WCAG 2.2 focus indicators" })
|
|
@@ -229,26 +263,36 @@ gt_search({ query: "Core Web Vitals LCP optimization" })
|
|
|
229
263
|
gt_search({ query: "gRPC vs REST tradeoffs" })
|
|
230
264
|
gt_search({ query: "OpenTelemetry Node.js setup" })
|
|
231
265
|
gt_search({ query: "RAG retrieval patterns" })
|
|
232
|
-
gt_search({ query: "
|
|
233
|
-
gt_search({ query: "
|
|
266
|
+
gt_search({ query: "Google Gemini API function calling" })
|
|
267
|
+
gt_search({ query: "Claude tool use best practices" })
|
|
268
|
+
gt_search({ query: "OpenAI structured output" })
|
|
269
|
+
gt_search({ query: "Firebase Firestore security rules" })
|
|
234
270
|
```
|
|
235
271
|
|
|
236
272
|
### Covered topic areas
|
|
237
273
|
|
|
238
274
|
| Area | Topics |
|
|
239
275
|
|---|---|
|
|
240
|
-
| Security | OWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, authentication, CORS, JWT, OAuth 2.1, OIDC, WebAuthn / passkeys |
|
|
276
|
+
| Security | OWASP Top 10, SQL injection, XSS / CSP, CSRF, HSTS, authentication, CORS, JWT, OAuth 2.1, OIDC, WebAuthn / passkeys, SSRF, file upload security, clickjacking, path traversal, API security, supply chain / SBOM |
|
|
241
277
|
| Accessibility | WCAG 2.2, WAI-ARIA, keyboard navigation |
|
|
242
278
|
| Performance | Core Web Vitals, image optimization, web fonts, Speculation Rules API |
|
|
243
|
-
| Web APIs | Fetch, Web Workers, Service Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer, ResizeObserver, Web Animations API, WebAssembly |
|
|
244
|
-
| CSS | Grid, Flexbox, Container Queries, Custom Properties, View Transitions, Cascade Layers |
|
|
245
|
-
| HTTP & protocols | Headers, caching, HTTP/2, HTTP/3, REST, OpenAPI, GraphQL, gRPC / Protocol Buffers, Server-Sent Events |
|
|
246
|
-
| Standards | JSON
|
|
247
|
-
|
|
|
248
|
-
|
|
|
279
|
+
| Web APIs | Fetch, Web Workers, Service Workers, WebSocket, WebRTC, IndexedDB, Web Crypto, Intersection Observer, ResizeObserver, Web Animations API, WebAssembly, AbortController, File System Access API |
|
|
280
|
+
| CSS | Grid, Flexbox, Container Queries, Custom Properties, View Transitions, Cascade Layers, Nesting, :has(), Subgrid, Scroll-driven Animations, oklch / color-mix, @scope |
|
|
281
|
+
| HTTP & protocols | Headers, caching, HTTP/2, HTTP/3, REST, OpenAPI, GraphQL, gRPC / Protocol Buffers, Server-Sent Events, JSON Schema |
|
|
282
|
+
| Standards | JSON-LD / Structured Data, OpenTelemetry, Semantic Versioning, MCP Protocol, Intl API, i18n / Localization |
|
|
283
|
+
| Google APIs | Gemini API, Maps API, Analytics 4, Ads API, Search Console, Sheets API, Drive API, Calendar API, OAuth / Identity, Tag Manager, reCAPTCHA, Lighthouse / PageSpeed, YouTube API, Gmail API, Workspace / Apps Script, Custom Search, Chrome Extensions, SEO guidelines, Fonts API |
|
|
284
|
+
| Google Cloud | Cloud Run, Cloud Functions, Cloud Storage, BigQuery, Pub/Sub, Vertex AI, Vision API, Speech APIs, Translation, Natural Language, GKE, IAM |
|
|
285
|
+
| Firebase | Firestore, Authentication, Cloud Functions, Hosting |
|
|
286
|
+
| Anthropic / Claude | Claude API, tool use, prompt caching, vision, extended thinking, computer use, streaming, message batches, PDF support, citations, models, rate limits, Claude Code, Agent SDK |
|
|
287
|
+
| OpenAI | Chat API, Responses API, function calling, structured output, embeddings, fine-tuning, vision, image generation, Whisper / STT, TTS, Realtime API, Batch API, moderation, Agents SDK, rate limits, production best practices |
|
|
288
|
+
| AI providers | Mistral AI, Cohere, Groq, Replicate, Together AI, Hugging Face |
|
|
289
|
+
| AI frameworks | LangChain, LangGraph, LlamaIndex, CrewAI, AutoGen |
|
|
290
|
+
| AI concepts | Agents & tool calling, RAG, prompt engineering, vector search / embeddings, fine-tuning, AI safety, evaluation, multimodal AI, code generation, voice AI |
|
|
291
|
+
| Vector databases | Pinecone, Chroma, Weaviate |
|
|
292
|
+
| Infrastructure | Docker, Kubernetes, GitHub Actions, Terraform, Cloudflare Workers, monorepo patterns |
|
|
249
293
|
| Databases | PostgreSQL, Redis, MongoDB |
|
|
250
294
|
| Languages | Rust, Go, Python, Node.js, TypeScript |
|
|
251
|
-
| Frameworks | NestJS, Elysia, Payload CMS, Kysely, Pinia, React Native / Expo + full ecosystem |
|
|
295
|
+
| Frameworks | NestJS, Elysia, Angular, Flutter, Payload CMS, Kysely, Pinia, React Native / Expo + full ecosystem, Material Design |
|
|
252
296
|
|
|
253
297
|
---
|
|
254
298
|
|
|
@@ -276,6 +320,8 @@ use gt to check WCAG focus indicators
|
|
|
276
320
|
use gt for OpenTelemetry setup
|
|
277
321
|
find all issues and fix with gt
|
|
278
322
|
use gt for gRPC
|
|
323
|
+
use gt for Google Gemini API
|
|
324
|
+
use gt for Claude tool use
|
|
279
325
|
```
|
|
280
326
|
|
|
281
327
|
### Direct tool calls
|
|
@@ -286,10 +332,13 @@ gt_get_docs({ libraryId: "nestjs/nest", topic: "guards" })
|
|
|
286
332
|
gt_best_practices({ libraryId: "vercel/next.js", topic: "caching" })
|
|
287
333
|
gt_auto_scan({ projectPath: "." })
|
|
288
334
|
gt_search({ query: "OpenTelemetry Node.js distributed tracing" })
|
|
335
|
+
gt_search({ query: "Google Gemini API function calling" })
|
|
336
|
+
gt_search({ query: "Claude prompt caching" })
|
|
289
337
|
gt_audit({ projectPath: ".", categories: ["security", "accessibility"] })
|
|
290
338
|
gt_changelog({ libraryId: "vercel/next.js", version: "15" })
|
|
291
339
|
gt_compat({ feature: "CSS container queries", environments: ["safari"] })
|
|
292
340
|
gt_compare({ libraries: ["prisma", "drizzle-orm"], criteria: "TypeScript support" })
|
|
341
|
+
gt_examples({ library: "hono", pattern: "middleware" })
|
|
293
342
|
```
|
|
294
343
|
|
|
295
344
|
---
|
|
@@ -305,13 +354,13 @@ For every library docs request, GroundTruth tries sources in this order and stop
|
|
|
305
354
|
1. **`llms.txt` / `llms-full.txt`** — context files published by the project maintainer specifically for LLM consumption. More reliable than scraping the docs site.
|
|
306
355
|
2. **Jina Reader** (`r.jina.ai`) — converts the official docs page to clean markdown. Handles JS-rendered sites that would return nothing via a plain fetch.
|
|
307
356
|
3. **GitHub README / releases** — latest release notes and README from the project repository.
|
|
308
|
-
4. **npm / PyPI
|
|
357
|
+
4. **npm / PyPI / crates.io / pkg.go.dev** — fallback for packages outside the curated registry, with automatic `llms.txt` probing on discovered homepages.
|
|
309
358
|
|
|
310
359
|
---
|
|
311
360
|
|
|
312
|
-
## Library coverage —
|
|
361
|
+
## Library coverage — unlimited
|
|
313
362
|
|
|
314
|
-
|
|
363
|
+
363+ curated entries in the registry, plus automatic fallback to npm, PyPI, crates.io, and pkg.go.dev. Any public package in any major ecosystem is resolvable — the registry gives you curated quality, the fallbacks give you universal reach.
|
|
315
364
|
|
|
316
365
|
| Ecosystem | Libraries |
|
|
317
366
|
|---|---|
|
|
@@ -322,9 +371,14 @@ Every major ecosystem. If a library publishes an `llms.txt`, it's probably in he
|
|
|
322
371
|
| Backend (Go) | Gin, Fiber, GORM, chi |
|
|
323
372
|
| Backend (Rust) | Axum, Actix Web, sqlx, Tokio |
|
|
324
373
|
| Database / ORM | Prisma, Drizzle, Kysely, TypeORM, Mongoose, Knex, Supabase, Neon, Turso, Electric SQL |
|
|
325
|
-
| Vector databases | Pinecone, Qdrant |
|
|
326
|
-
| AI /
|
|
327
|
-
| AI
|
|
374
|
+
| Vector databases | Pinecone, Chroma, Weaviate, Qdrant |
|
|
375
|
+
| AI / LLM providers | Anthropic Claude API, OpenAI API, Google Gemini API, Mistral AI, Cohere, Groq, Replicate, Together AI, Fireworks AI |
|
|
376
|
+
| AI SDKs (JS/TS) | Vercel AI SDK, Anthropic SDK, OpenAI SDK, Google Generative AI, LangChain.js, Transformers.js, Ollama, assistant-ui |
|
|
377
|
+
| AI SDKs (Python) | Anthropic Python SDK, OpenAI Python SDK, Google Gemini Python SDK, LangChain, LlamaIndex, CrewAI, LangGraph, AutoGen, HuggingFace Transformers |
|
|
378
|
+
| AI agents | Claude Code, Claude Agent SDK, OpenAI Agents SDK |
|
|
379
|
+
| AI audio / voice | ElevenLabs, Deepgram, AssemblyAI |
|
|
380
|
+
| AI image / video | Stability AI, fal.ai |
|
|
381
|
+
| Google | Firebase, Google Cloud, Google Maps API, Google APIs Client, Vertex AI, Angular, Flutter, Material Design |
|
|
328
382
|
| Testing | Vitest, Playwright, Jest, Testing Library, Cypress, MSW |
|
|
329
383
|
| Auth | Clerk, NextAuth, Better Auth, Lucia, Passport.js |
|
|
330
384
|
| Validation | Zod, Yup, Valibot, Effect |
|
|
@@ -336,12 +390,14 @@ Every major ecosystem. If a library publishes an `llms.txt`, it's probably in he
|
|
|
336
390
|
| Mobile | Expo, React Native, React Navigation, NativeWind, Reanimated, MMKV, FlashList, Skia, Moti |
|
|
337
391
|
| Build tools | Vite, Turbopack, SWC, Rollup, Webpack, Biome, ESLint, Prettier, Turborepo, Nx |
|
|
338
392
|
| Runtime | Node.js, Bun, Deno |
|
|
339
|
-
| Cloud | Vercel, Cloudflare Workers, AWS SDK, Firebase |
|
|
393
|
+
| Cloud | Vercel, Cloudflare Workers, AWS SDK, Firebase, Google Cloud |
|
|
394
|
+
| Monitoring | Sentry, PostHog, OpenTelemetry, Pino |
|
|
395
|
+
| Automation | n8n, Trigger.dev |
|
|
340
396
|
| HTTP clients | Axios, ky |
|
|
341
397
|
| Real-time | Socket.IO, PartyKit |
|
|
342
|
-
| Observability | OpenTelemetry, Sentry, Pino |
|
|
343
398
|
| GraphQL clients | Apollo Client, urql |
|
|
344
|
-
|
|
|
399
|
+
| ML / Deep learning | PyTorch, TensorFlow, HuggingFace Transformers |
|
|
400
|
+
| Serverless | Upstash Redis |
|
|
345
401
|
|
|
346
402
|
---
|
|
347
403
|
|
|
@@ -353,14 +409,19 @@ Context7 is solid. Here's why I reach for this instead.
|
|
|
353
409
|
|---|---|---|
|
|
354
410
|
| Hosting | Self-hosted | Cloud |
|
|
355
411
|
| Rate limits | None | Yes |
|
|
356
|
-
| Source priority | llms.txt
|
|
412
|
+
| Source priority | llms.txt -> Jina -> GitHub | Doc page embeddings |
|
|
357
413
|
| Code audit | Yes — 100+ patterns, 18 categories, file:line, live fixes | No |
|
|
358
|
-
| Freeform search | Yes — OWASP, MDN, AI docs, web standards | Library docs only |
|
|
414
|
+
| Freeform search | Yes — OWASP, MDN, AI docs, Google APIs, web standards | Library docs only |
|
|
359
415
|
| Changelog lookup | Yes — GitHub Releases, CHANGELOG.md, docs site | No |
|
|
360
416
|
| Browser compatibility | Yes — MDN + caniuse.com | No |
|
|
361
|
-
| Library comparison | Yes — 2
|
|
362
|
-
|
|
|
417
|
+
| Library comparison | Yes — 2-3 libraries side-by-side, any criteria | No |
|
|
418
|
+
| Code examples | Yes — GitHub Code Search for real-world usage | No |
|
|
419
|
+
| Lockfile detection | Yes — reads exact versions from lockfiles | No |
|
|
420
|
+
| Libraries | Unlimited — 363+ curated + npm/PyPI/crates.io/Go fallback | ~130 |
|
|
421
|
+
| AI coverage | Claude, OpenAI, Gemini, Mistral, Cohere, Groq, LangChain, LlamaIndex, CrewAI, 20+ more | Limited |
|
|
422
|
+
| Google APIs | Full coverage — Maps, Analytics, Ads, Cloud, Firebase, Vertex AI, 30+ services | Partial |
|
|
363
423
|
| Python / Rust / Go | Yes | Limited |
|
|
424
|
+
| Update notifications | Yes — notifies when new version available | No |
|
|
364
425
|
| API key required | No | No |
|
|
365
426
|
|
|
366
427
|
The two tools approach the same problem from different angles. Context7 embeds doc pages and retrieves them by semantic similarity. GroundTruth fetches from the source at query time and prioritizes `llms.txt` files — content the maintainers specifically wrote for LLM consumption. Neither is universally better, but when you hit a rate limit at 11pm debugging a production issue, "self-hosted with no quota" stops being a nice-to-have.
|
|
@@ -369,7 +430,7 @@ The two tools approach the same problem from different angles. Context7 embeds d
|
|
|
369
430
|
|
|
370
431
|
## Tests
|
|
371
432
|
|
|
372
|
-
|
|
433
|
+
704 tests across 22 files. Every audit pattern has a test. Every manifest parser has a test. If a pattern ships without a test, the CI pipeline says no before any human has to.
|
|
373
434
|
|
|
374
435
|
```bash
|
|
375
436
|
npm test # run all tests
|
|
@@ -384,20 +445,48 @@ npm run typecheck # TypeScript strict check (no emit)
|
|
|
384
445
|
| `src/tools/auto-scan.test.ts` | All 8 manifest parsers using temp directories (package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod, pom.xml, composer.json, build.gradle) |
|
|
385
446
|
| `src/utils/extract.test.ts` | Topic relevance ranking, truncation, document order preservation |
|
|
386
447
|
| `src/utils/sanitize.test.ts` | Prompt injection stripping, `<script>`/`<style>` removal, navigation link cleanup |
|
|
448
|
+
| `src/utils/lockfile.test.ts` | Lockfile version detection for package-lock, pnpm-lock, yarn.lock, Cargo.lock |
|
|
449
|
+
| `src/tools/examples.test.ts` | GitHub Code Search, caching, rate limit handling, error states |
|
|
450
|
+
| `src/utils/version-check.test.ts` | Version comparison, update notification formatting, pending update state |
|
|
387
451
|
|
|
388
452
|
Tests run in CI on every push and pull request to `main`. See `.github/workflows/ci.yml`.
|
|
389
453
|
|
|
390
454
|
---
|
|
391
455
|
|
|
456
|
+
## Environment variables
|
|
457
|
+
|
|
458
|
+
All optional. GroundTruth works out of the box with zero configuration.
|
|
459
|
+
|
|
460
|
+
| Variable | Purpose | Default |
|
|
461
|
+
|---|---|---|
|
|
462
|
+
| `GT_GITHUB_TOKEN` | GitHub API auth — raises rate limit from 60 to 5000 req/hr | none |
|
|
463
|
+
| `GT_CACHE_DIR` | Disk cache location for persistent cross-session caching | `~/.gt-mcp-cache` |
|
|
464
|
+
| `GT_CONCURRENCY` | Parallel fetch limit in `gt_auto_scan` | `6` |
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
392
468
|
## Requirements
|
|
393
469
|
|
|
394
|
-
- Node.js
|
|
470
|
+
- Node.js 24+
|
|
395
471
|
- Claude Code, Cursor, VS Code (MCP extension), or Claude Desktop
|
|
396
472
|
|
|
397
473
|
That's it. No Docker. No config files. No environment variables unless you want the GitHub token.
|
|
398
474
|
|
|
399
475
|
---
|
|
400
476
|
|
|
477
|
+
## Active development
|
|
478
|
+
|
|
479
|
+
GroundTruth is under active development. New curated registry entries, audit patterns, search topics, and features are added regularly. The registry covers 363+ libraries with deep curated metadata, and automatic fallback to npm, PyPI, crates.io, and pkg.go.dev means any public package is resolvable out of the box.
|
|
480
|
+
|
|
481
|
+
Recent additions include comprehensive coverage for Google Gemini API, Anthropic Claude API (tool use, prompt caching, vision, extended thinking, computer use, streaming, batches), OpenAI API (chat, responses, function calling, structured output, embeddings, fine-tuning, realtime, agents), and 20+ additional AI providers and frameworks.
|
|
482
|
+
|
|
483
|
+
To stay updated:
|
|
484
|
+
- **Star and watch** the [GitHub repo](https://github.com/rm-rf-prod/GroundTruth-MCP) for release notifications
|
|
485
|
+
- **Use `@latest`** in your MCP config (the default install command) — npx fetches the newest version automatically
|
|
486
|
+
- **Check tool responses** — GroundTruth appends an update notice when a newer version is available
|
|
487
|
+
|
|
488
|
+
---
|
|
489
|
+
|
|
401
490
|
## Contributing
|
|
402
491
|
|
|
403
492
|
The library registry lives in `src/sources/registry.ts`. Adding a library is a PR with `id`, `name`, `docsUrl`, and `llmsTxtUrl` if the project publishes one. If you've been frustrated by a library not being covered, that's the fix — it takes about five minutes.
|
|
@@ -406,9 +495,23 @@ Issues and requests: [github.com/rm-rf-prod/GroundTruth-MCP/issues](https://gith
|
|
|
406
495
|
|
|
407
496
|
---
|
|
408
497
|
|
|
498
|
+
## Full documentation
|
|
499
|
+
|
|
500
|
+
Want the full technical breakdown? Architecture, every tool's input schema, every audit pattern, the fetch pipeline, caching internals, the obfuscation build, and how the registry works?
|
|
501
|
+
|
|
502
|
+
**[Read the full docs](./docs/DOCUMENTATION.md)** — everything in one place, for the people who actually read documentation before using a tool.
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
409
506
|
## Star history
|
|
410
507
|
|
|
411
|
-
|
|
508
|
+
<a href="https://star-history.com/#rm-rf-prod/GroundTruth-MCP&Date">
|
|
509
|
+
<picture>
|
|
510
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date&theme=dark" />
|
|
511
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date" />
|
|
512
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=rm-rf-prod/GroundTruth-MCP&type=Date" />
|
|
513
|
+
</picture>
|
|
514
|
+
</a>
|
|
412
515
|
|
|
413
516
|
---
|
|
414
517
|
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const SERVER_NAME = "GroundTruth";
|
|
2
|
-
export declare const SERVER_VERSION = "2.
|
|
2
|
+
export declare const SERVER_VERSION = "2.5.1";
|
|
3
3
|
export declare const REGISTRY_BADGE_SIZE = 363;
|
|
4
4
|
export declare const CHARS_PER_TOKEN = 3.8;
|
|
5
5
|
export declare const DISK_CACHE_DIR: string;
|
package/dist/constants.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const a0_0x51cb44=a0_0x1405;(function(_0x2e16e9,_0x406b9d){const _0x54e7cf=a0_0x1405,_0x4542dd=_0x2e16e9();while(!![]){try{const _0x3573a3=-parseInt(_0x54e7cf(0x9e,'6zj*'))/0x1*(-parseInt(_0x54e7cf(0xa7,'2a9$'))/0x2)+-parseInt(_0x54e7cf(0xa9,'g9RI'))/0x3*(parseInt(_0x54e7cf(0xa4,'M5VA'))/0x4)+parseInt(_0x54e7cf(0x94,'PxUQ'))/0x5+parseInt(_0x54e7cf(0xa5,'M5VA'))/0x6*(parseInt(_0x54e7cf(0x95,'O]4['))/0x7)+-parseInt(_0x54e7cf(0xb1,'wy2P'))/0x8*(-parseInt(_0x54e7cf(0x93,'s(Tv'))/0x9)+parseInt(_0x54e7cf(0xa3,'Hd1D'))/0xa*(-parseInt(_0x54e7cf(0xa6,'rdRO'))/0xb)+parseInt(_0x54e7cf(0x90,'Ct2X'))/0xc*(-parseInt(_0x54e7cf(0xa1,'A!IY'))/0xd);if(_0x3573a3===_0x406b9d)break;else _0x4542dd['push'](_0x4542dd['shift']());}catch(_0x40153a){_0x4542dd['push'](_0x4542dd['shift']());}}}(a0_0x5b90,0x441a5));export const SERVER_NAME=a0_0x51cb44(0x9f,'tSNV')+'h';function a0_0x5b90(){const _0x3e5a90=['WOKapSoJW7aoaCkB','WRTsvW/cLdHGwSkLW44','WRZdLSkboCowW4OhWPNdPYa','kCk7WPy5stFdSxq','a2/cIvRdSM4lWO0+W5bgvW','sKLQW6xcLSk9W7jwemk3','W4RdSGFcUCobuhBcQ3iyvdCV','W6iteeJdLZb5e8ksW5uLBmkS','W5LlW6rUW5X9W5xcUrTQ','W4xdTd83mmkrW58','WOvKkmkOWRqnmhxcKJu','WR4oW69P','W4hcPSoovmovW43dJmkIW7TvWP3cV8oO','W4RdKfdcUSkiaCk7W4VcHmkmwq','W6HBWRy/yt9Ay8o5W74j','sCkkWQuuWORdMmocbvFdQCkMbq','t8kgWQCuWOldKSkKdh/dH8k1p8ow','wCoNBSkeA8oXC8od','W6OqfuJdK2SNfSkoW743','hCk6kmkjBCo9mmoPW7tcPW','jmoHWOPaFSkQWRm','r8oToCohvCo/dNmJ','W48Ap8oiW4mmjSkGWO7dVq','bSknqwldOqLCWONdMCobgG','WRdcISkfp8omW5yxWPxcVw0','cHldOWpcHqOo','h8k0WQjdWOFcGmo+','hCkPWRHsW5RdM8k4fmoZCG','lCkYgmoqw8kEWQ/cPctdJmkiWP4','W5pdJSozD8kKW5q2W5FcKSknWQ3dQSkg','aa3cHCoMFSkjWOmj','W67cNCotyCkaWOyYWPJdVLRdU8oy','m8oZrSksqCkgWRZcV0RdRW','vmkpsvtcSa','i8k9WPfsBSkNWPxdTG','WPZdPmknf8kEW4/dMSokW65n','W5TBnq','W53dLJRcQhdcSxBdTa','E8oUwmkwhmorW7xcPrFdRW','W6voWPK6fmoWWQvFW6CA','wmkkAJVcLmoFWOHWWQy','W6lcQCoAys3cMSkwW4n2sM0Ebq'];a0_0x5b90=function(){return _0x3e5a90;};return a0_0x5b90();}export const SERVER_VERSION=a0_0x51cb44(0xb6,'!dO3');export const REGISTRY_BADGE_SIZE=0x16b;export const CHARS_PER_TOKEN=3.8;export const DISK_CACHE_DIR=process.env.GT_CACHE_DIR??(process.env.HOME?process.env.HOME+(a0_0x51cb44(0x92,'mR#g')+a0_0x51cb44(0xa0,'Hd1D')):a0_0x51cb44(0xb5,'wy2P')+a0_0x51cb44(0xb3,'H#qo'));export const DEFAULT_TOKEN_LIMIT=0x1f40;export const MAX_TOKEN_LIMIT=0x4e20;function a0_0x1405(_0x2b74f6,_0x3cc51b){_0x2b74f6=_0x2b74f6-0x8f;const _0x5b9032=a0_0x5b90();let _0x14059a=_0x5b9032[_0x2b74f6];if(a0_0x1405['MGBqTS']===undefined){var _0x10503e=function(_0x4b9e67){const _0x12f846='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x50bc76='',_0x1ec587='';for(let _0x4387d1=0x0,_0x5b795e,_0x44f8cf,_0x2d1606=0x0;_0x44f8cf=_0x4b9e67['charAt'](_0x2d1606++);~_0x44f8cf&&(_0x5b795e=_0x4387d1%0x4?_0x5b795e*0x40+_0x44f8cf:_0x44f8cf,_0x4387d1++%0x4)?_0x50bc76+=String['fromCharCode'](0xff&_0x5b795e>>(-0x2*_0x4387d1&0x6)):0x0){_0x44f8cf=_0x12f846['indexOf'](_0x44f8cf);}for(let _0x4f244e=0x0,_0x19ba50=_0x50bc76['length'];_0x4f244e<_0x19ba50;_0x4f244e++){_0x1ec587+='%'+('00'+_0x50bc76['charCodeAt'](_0x4f244e)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1ec587);};const _0x2a4296=function(_0x448702,_0x2dcd97){let _0x100a37=[],_0x41673c=0x0,_0x592ae6,_0x564105='';_0x448702=_0x10503e(_0x448702);let _0x16b34c;for(_0x16b34c=0x0;_0x16b34c<0x100;_0x16b34c++){_0x100a37[_0x16b34c]=_0x16b34c;}for(_0x16b34c=0x0;_0x16b34c<0x100;_0x16b34c++){_0x41673c=(_0x41673c+_0x100a37[_0x16b34c]+_0x2dcd97['charCodeAt'](_0x16b34c%_0x2dcd97['length']))%0x100,_0x592ae6=_0x100a37[_0x16b34c],_0x100a37[_0x16b34c]=_0x100a37[_0x41673c],_0x100a37[_0x41673c]=_0x592ae6;}_0x16b34c=0x0,_0x41673c=0x0;for(let _0x48663d=0x0;_0x48663d<_0x448702['length'];_0x48663d++){_0x16b34c=(_0x16b34c+0x1)%0x100,_0x41673c=(_0x41673c+_0x100a37[_0x16b34c])%0x100,_0x592ae6=_0x100a37[_0x16b34c],_0x100a37[_0x16b34c]=_0x100a37[_0x41673c],_0x100a37[_0x41673c]=_0x592ae6,_0x564105+=String['fromCharCode'](_0x448702['charCodeAt'](_0x48663d)^_0x100a37[(_0x100a37[_0x16b34c]+_0x100a37[_0x41673c])%0x100]);}return _0x564105;};a0_0x1405['eNDfVl']=_0x2a4296,a0_0x1405['yTPEjJ']={},a0_0x1405['MGBqTS']=!![];}const _0x410983=_0x5b9032[0x0],_0x4778da=_0x2b74f6+_0x410983,_0x3256fb=a0_0x1405['yTPEjJ'][_0x4778da];return!_0x3256fb?(a0_0x1405['ZTbHpA']===undefined&&(a0_0x1405['ZTbHpA']=!![]),_0x14059a=a0_0x1405['eNDfVl'](_0x14059a,_0x3cc51b),a0_0x1405['yTPEjJ'][_0x4778da]=_0x14059a):_0x14059a=_0x3256fb,_0x14059a;}export const CACHE_TTL_MS=0x1e*0x3c*0x3e8;export const FETCH_TIMEOUT_MS=0x3a98;export const JINA_BASE_URL=a0_0x51cb44(0x9a,'h$3U')+a0_0x51cb44(0xaf,'N]mf');export const NPM_REGISTRY_URL=a0_0x51cb44(0xb0,'N]mf')+a0_0x51cb44(0x91,'wy2P')+'js.org';export const PYPI_URL=a0_0x51cb44(0xb8,'A!IY')+a0_0x51cb44(0xa8,'rdRO')+'i';export const GITHUB_API_URL=a0_0x51cb44(0x9d,'HyNG')+a0_0x51cb44(0xad,'V[#Q')+'om';export const GITHUB_RAW_URL=a0_0x51cb44(0x96,'2a9$')+a0_0x51cb44(0xab,'O]4[')+a0_0x51cb44(0x97,'V[#Q')+a0_0x51cb44(0x8f,'O]4[');export const INJECTION_PATTERNS=[/ignore\s+(all\s+)?(previous|prior|above)\s+instructions?/gi,/you\s+(are|must|should|will|have\s+to)\s+now/gi,/\bSYSTEM\s*:/g,/\bASSISTANT\s*:/g,/\b(JAILBREAK|DAN|DO ANYTHING NOW)\b/gi,/<\s*(?:system|instructions?)\s*>/gi,/forget\s+(everything|all)\s+(you|your)/gi,/new\s+instructions?.*?:/gi,/override\s+(your\s+)?(previous\s+)?instructions?/gi,/<!--[\s\S]{0,500}-->/g,/[\u202A-\u202E\u2066-\u2069]/g,/\bact\s+as\b.{0,50}(?:you are|you're|an?\s+ai|a\s+model)/gi,/\bpretend\s+(?:you\s+are|to\s+be)\b/gi,/\bfrom\s+now\s+on\b.{0,30}(?:you|ignore|forget)/gi];
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
function a1_0x4a12(_0x5e35e2,_0x554fa2){_0x5e35e2=_0x5e35e2-0x1b1;const _0x298aaf=a1_0x298a();let _0x4a121a=_0x298aaf[_0x5e35e2];if(a1_0x4a12['ehZIHF']===undefined){var _0xdb05ca=function(_0x3a2c41){const _0x22f437='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1b2118='',_0x51a434='';for(let _0x1acfff=0x0,_0x46f5fc,_0x38b285,_0x11813a=0x0;_0x38b285=_0x3a2c41['charAt'](_0x11813a++);~_0x38b285&&(_0x46f5fc=_0x1acfff%0x4?_0x46f5fc*0x40+_0x38b285:_0x38b285,_0x1acfff++%0x4)?_0x1b2118+=String['fromCharCode'](0xff&_0x46f5fc>>(-0x2*_0x1acfff&0x6)):0x0){_0x38b285=_0x22f437['indexOf'](_0x38b285);}for(let _0x4fc2bd=0x0,_0x589d20=_0x1b2118['length'];_0x4fc2bd<_0x589d20;_0x4fc2bd++){_0x51a434+='%'+('00'+_0x1b2118['charCodeAt'](_0x4fc2bd)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x51a434);};const _0x4767c7=function(_0x1d3f5e,_0x34f1ac){let _0x42fa92=[],_0x593835=0x0,_0x20e5e7,_0x12f058='';_0x1d3f5e=_0xdb05ca(_0x1d3f5e);let _0x11dd3b;for(_0x11dd3b=0x0;_0x11dd3b<0x100;_0x11dd3b++){_0x42fa92[_0x11dd3b]=_0x11dd3b;}for(_0x11dd3b=0x0;_0x11dd3b<0x100;_0x11dd3b++){_0x593835=(_0x593835+_0x42fa92[_0x11dd3b]+_0x34f1ac['charCodeAt'](_0x11dd3b%_0x34f1ac['length']))%0x100,_0x20e5e7=_0x42fa92[_0x11dd3b],_0x42fa92[_0x11dd3b]=_0x42fa92[_0x593835],_0x42fa92[_0x593835]=_0x20e5e7;}_0x11dd3b=0x0,_0x593835=0x0;for(let _0x33a257=0x0;_0x33a257<_0x1d3f5e['length'];_0x33a257++){_0x11dd3b=(_0x11dd3b+0x1)%0x100,_0x593835=(_0x593835+_0x42fa92[_0x11dd3b])%0x100,_0x20e5e7=_0x42fa92[_0x11dd3b],_0x42fa92[_0x11dd3b]=_0x42fa92[_0x593835],_0x42fa92[_0x593835]=_0x20e5e7,_0x12f058+=String['fromCharCode'](_0x1d3f5e['charCodeAt'](_0x33a257)^_0x42fa92[(_0x42fa92[_0x11dd3b]+_0x42fa92[_0x593835])%0x100]);}return _0x12f058;};a1_0x4a12['nIZBhx']=_0x4767c7,a1_0x4a12['eyuMdX']={},a1_0x4a12['ehZIHF']=!![];}const _0x10f867=_0x298aaf[0x0],_0x286448=_0x5e35e2+_0x10f867,_0x1bde3b=a1_0x4a12['eyuMdX'][_0x286448];return!_0x1bde3b?(a1_0x4a12['JkDJGw']===undefined&&(a1_0x4a12['JkDJGw']=!![]),_0x4a121a=a1_0x4a12['nIZBhx'](_0x4a121a,_0x554fa2),a1_0x4a12['eyuMdX'][_0x286448]=_0x4a121a):_0x4a121a=_0x1bde3b,_0x4a121a;}const a1_0x40cacd=a1_0x4a12;(function(_0x46e58f,_0x3ec00a){const _0x43c2e4=a1_0x4a12,_0x1fd659=_0x46e58f();while(!![]){try{const _0x15da29=-parseInt(_0x43c2e4(0x26e,'Tw@B'))/0x1*(parseInt(_0x43c2e4(0x260,'1!um'))/0x2)+parseInt(_0x43c2e4(0x2c5,'GbC0'))/0x3+parseInt(_0x43c2e4(0x2c3,'1!um'))/0x4+parseInt(_0x43c2e4(0x283,'rTAy'))/0x5*(-parseInt(_0x43c2e4(0x1fc,'uS18'))/0x6)+parseInt(_0x43c2e4(0x24d,'^t9^'))/0x7+parseInt(_0x43c2e4(0x27b,'U8YA'))/0x8+-parseInt(_0x43c2e4(0x21e,')BKf'))/0x9;if(_0x15da29===_0x3ec00a)break;else _0x1fd659['push'](_0x1fd659['shift']());}catch(_0x475410){_0x1fd659['push'](_0x1fd659['shift']());}}}(a1_0x298a,0x9b093));import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{SERVER_NAME,SERVER_VERSION}from'./constants.js';import{getInstallId}from'./utils/watermark.js';import{z}from'zod';import{registerResolveTool}from'./tools/resolve.js';import{registerDocsTool}from'./tools/docs.js';import{registerBestPracticesTool}from'./tools/best-practices.js';import{registerAutoScanTool}from'./tools/auto-scan.js';import{registerSearchTool}from'./tools/search.js';import{registerAuditTool}from'./tools/audit.js';import{registerChangelogTool}from'./tools/changelog.js';function a1_0x298a(){const _0x280ad7=['rbtdUeBcOmoWW5NdJLKY','WRDNC3W','k8kWiCo6','wCoHwMtdJSoWe8oHWRCg','W7rUcIOnW65/rCo3ma','WRutWRFdGanHumoooxy','umkutCopW6BcH1JdNmklW4e','tY4rW6PHbWKGWOL1','W4ddPSkLoCkFhtpdPd/dNW','lEkcJhfFa0ddUMW8FW','WOhdNmomgCo7ah5wWO99','hmkGuMNcLSoIcmkOWRiC','CHFdM202zcSGyJi','o080ttRcMMONBmoA','W451A8kPW4/cLGJdGmkMWRa','ftxdOCk3DxFdR8obW4v1','W4zazSo3W6tdNN1yBSka','W5pdOCo3','BHSRua','F8o5mMGftSoVFM58','tM0uW6O','gYeaWPvVaW4XWQvX','WRzXBNO','WONcG8oJACoGqgBcJCo+','WPnQbtZdIq1CW7pdMZm','WOZcOdNdOSkjDCoJF8o8Aa','jSkIWQldMdVdTMhcQSoqb0q5','WPpcNSkiwSoWc3GfW4Pq','t1hdU1xcQSoWW43cLrDZ','WR/cHCkuhSobu8oHWOrtWQO','WOSrxr54W5ZcNvfuga','W5DjvGDbaGVdKLpcIG','WQrkwaCc','WP8vd8kCW6pcHuVdGmkpbW','emoOWOtdHtdcQ8osthlcHW','WRhdI8kFtmkhqSo9WPvEW68','vmo5rLSiW4BcIZf3iG','hYzlWQ5TqwFdQmkHzmkOW4KP','tZujW7y+udNdHmk4tq','W7ZdOSkqjmokWOC4ksmdW4FdJZa','E8oWW6/cHg/cSapcH8oyja','W6ypWOFdV055vmoBFEkaHW','W5NcNNBcJJfqE8oHW6VdSa','WOJdGmo0F8kUvMVcMmkWWQC','W5FdG0FcVSoBWPTrkqldLG','fCo0WO7dI2RcJmkhg3/cKa','Dq8RrNlcLIi4ASoE','W4XNp8kLW43cLGxdN8kLWQS','vmo0s1DyW6NcMJ1MFG','W6hcKSo1FITVW4/dJSkSW5S','W47cHbNdN3DkFmoHWQ7cVa','BSoUxqDbW6VcS2SJCq','ECo7otWzxCkNEse3','WR8dgWNdHND3uhup','WRlcICo1nWzB','mCoTW5iostGrW6P1WOS','t1dcH8kaFdVcRSkcW4zY','tfFdQf3dRCo5W53dNxmY','WOhdSmk1omkoe0NcR3dcNa','WR3dJfHFqtVdOCkytCku','W6pdLmorWOFdUeynW7itnq','W77cJCkFtmkhv8o5WOSBW6K','p8oHW7tdGw3cQGpcR8oWAa','W6NdLSoEWOVcPGSjWRixFG','x8oRW6ZcR8onr8kHumoefG','wCkEgCoBW6lcILBdHSooWOK','D0tdVcGRF38vy3m','d2WKxsRcIa','WRaNWPi1hCoKqmkpWRddTG','WRuXtHHyWRrwW73cJCki','bmoZWOxdJ27dLq','dSoaWQj4WOSoDeHUWRu','dmkcW6C+WPyolfjRWRi','cJBcRCkXyJJdPmkeW4PO','W5RdKeVcSCorW5WxnbxcKW','W7KpsI/dGbPAWRJcJX8','W5eMCvW5hq06Fc4','W6a/WO7dTub9','b3q5vZBdGYFdRCkqW6K','i8k4aNqdwSkQEsz/','W5KiqI3cJ2i1W5VcLb4','W6JdM8obdmktaCkIWQf5W6qodWW','s1hdSuC','FSoRW4G1i8oIAG','WO/cSSk3p8kLqfZcVgpcNa','WRu8WOjM4OcLW6rGWONcSSoT','WP/dMSkLWQ0QumorxCk1nG','W59gFCocWOBdU0FcH8k4cW','W55JnvuZfKzdA2y','WQeNWPKRqCkW','WOxdL0dcIhXoC8o3W6FcPW','oCkjWPxcN8k5BSo2WRT+lG','o8kWASkOscRcK8kefmkX','WRq0WPuUeCkRxCkpW73cOW','FHTU4Oc2FSoyjxf+W4i','h1xdP0RdPCo2W4/cHbbZ','WOFcUNxdU8kpy8kPFmoWBG','xbOHvZddKH4JEmoc','mCkkWOlcJmo2cSkiW49sfW','WR3cO8ouF8kDW5G','W5bXmSkJW5NdM0pcICkRWRa','vgpcUCo2i2tcTSkcW7T/s3ldGa','WRSR4OA4AqxdT1bwW6yQ','t8kzcCoFWQZdGW','W4XNsqjtW7m','W5lcLCkAh8oMhtSAWOnN','WQWfha/dIwrHkdvg','rcBcR1i','WORcQchdRSoDAmkSESoMDW','tSkUus3dMCoZbSkOWRiD','W5XYFqL6ta0sA30','n8ksWO7cLCo5q8oqW482cW','W61+wcXoWQnUsSoNEq','WO0deW54WO/dGHLAaW','mmkNzmoUDchdLSofgSk4','EfdcUwSTCwuxDsa','WONcVqRdUmkyBCkXESo7mG','qbj7hgtdGtFcKSktW6u','W78GWOxdOKyPqCohoga','EfhdVrpcPSo3W5lcHHX+','sCkhW7eSWPaoFX4K4Owu','dchcQuOCWRyZm8kLhG','W480n8kbW6/dUe3cHCoKWRe','WO3cOdtdP8oDF8kSBmoHEq','DuhdTNK0','reOoW706hNxdKCkJca','W5pdLCosW4JdRv8ZW78Fpq','CCo2W77dGwpcQGpcH8kupG','WR3cN8kzxCocrCk1WQfEW74','W7z5cIHcW69MrSoXoa','oSocWQi+WPaFzbX3WRi','WP9Msa4DW7DqW7RdISoB','W7CZWPhdOKP9tmkpDvW','gCkXWRdcUmkshCoVvSk2fZRdI8kw','rGhdOCkOCIxdR8ktW5bb','W4RcMmkfW5WhhSoCe8k5nG','xmo9W77cGMFdPfhcG8oylq','W4tdSCk7','W5fFuLvfhNtdRMhcQG','W4X2wb5pW71fW7dcGSol','W5hdOmk/jSkkrW','WRa5WPnMrCk2uSkdWR3dQG','WPrdW4VcRmoiW6ade8oxW5lcQa','lSkiWOCDbmoxsCkzWPug','WQVdRCokF8kDW5OSidOr','WOifrXzcW5ZdKHbBvG','w2CsW7mRba','ot7dOSkIy3FIGPRdGCoVEq','p8obW58i','DrWVvJFdMsrXBmoy','WRhdKuOaudRdTmkjtmkE','W5/cKN3cItfkyCkLW6JcUa','WQddKf9jrsFdS8kms8oB','WRiYWOhdTKX7umkpkgm','WRVdJKHiFYtdVmkisSkw','txWjW617eJddLSk4bG','W5b+gWrBW7jyW6RdHSoj','W6FcNNhcJ3brA8kLW7RcSG','WR3dKmkKW6yTuSoAcSkGAq','WONdL8o2W6q4tCoagmoZjW','WP1LFvy5bq8qlI4','WR7cPCojFmkwW5X4BdmD','tvxdVvRcQSoSWOdcHW11','W6aZWOZcSfDMfCojnh0','WQZcGSkasSklfSoBWOHFW68','WRZcMCkrtmoEfUkcGCohACoV','WQBdLSofWOFdOe4pW6HqmW','lvH/egRcGx0xt8oyWOVcK2S','WOlcPJlcQ+kdQsZcHxZdP3K','dcxcO0TiW7e2kmkGha','g2OKrJ3cHIFcOSkrW6m','adxdV8kKmcldVSkgW5T9','W6zWWOBdTvb9fCoFl3i','WRm2W7zrW7Wtpsb8Fq','WRaHWPCKumk3vSkzW7/cOW','WRJdI1LfvgJdTmkeqCox','tdXUqdVdHt5XFCoe','xqK6qZlcLI8JF8oz','W5msESk2W6NdLZbBDmoa','W5JdIalcU8ohWO8eob7dMG','nSoJ4OgqWQHBk8ktW4eqWRS','W4dcH8oYrCkSrMhcHCoKW70','W7Lmt0FdL3DLfc0i','BbSRuhhdHd8/ECoF','WOCvqbPVW4BdKXq','BCo0W7JcLwxcP0BcLCkulG','cwOSvI3dIctdRCktWRa','WRLTtZ0bW6SVsmoQlW','FHO8tsW','ySo2ndWyqSkQEd1/','e8oFW6qS','W55MFSk+W5lcLGRdImkPWQC','tYLuWRLUbXnLWO5P','lCk3zmohsHJcPCo0vSkZ','W4JdTSk1A8knw1dcVNNdNW','pHpdJxGLimkMWRNcP8km','FHS6aJZdKZKLlCog','hCkbW7i2WOy2lHZIHPBdPG','F8oHFXzya8kQAJPf','W5Djvabqa1/dPctcVW','WQq9pY7cGSkiW6D4W6Pr','mfldQNjMlCk9WQtdOSoE','WR/dJmkZWQ0SsSoQhSk7mG','meddRxiJyCkXWQtdR8oF','dxK5usW','DmklWOldMSoGdmkDWPSXnq','W4i8WOhdSvbSfCoAlNy','WPezrWa9W5VdNGfCfq','WPWM4OcmW7/cI8oAdColWRBcOW','WQ3cPJJdPSkCiCkWFmoJEW','WPOhfCoLWQBdJWldImoBaW','A8oIW4iibmoCdmkgWOCB','W5vVzHm8b1fdpY4','W5fND18/qa','WR/cKCkoW5hcVrKUW5auhWjq','pCkuW4FcKCoYhCoCWOT4jW','W4BdPSkpkmkvxKNcVgpcMG','W5NcKNdcMh9xmSo3W6VcSq','hhK/s2tdJY3dRCkgW7G','t8oTW7FdRmotr8k1ua','WQGLWPnMv8kRrSkeWRFcRW','W5LJCmk+W4ddHuJcICkZWQC','W47dOqldImk8s8oQnCkZAG','xmo/qvDjW6BcIMLLAq','WQ06g3LvWRS7s8oZfsfvWOi','wIGqWQT/aG5PW5PL','WPBcOCkjhmkRreZcSW','WQpcJ8oMlafzW68','WRVdKb5iqsVdVCoemSoc','bSoOWP7dMZlcGCklathcHq','vmoSuX5eW6NcJcvMia','aCoXWO3dKh/dHCkptZhcIa','fxRdRmkVDhFdVCkjW4zR','gsDnWQXJisFdGSkQyCk2','hhKUrI3dHsBcVSos4Oke','W4pcSSkJp8kBxv3cVgpcMW','wmoHugtdHCoHqmkSWRGt','W7tdN8kx4Ow6WQPmgmodeJu','W4ddV8kGj8kFqbNcThFdNW','qCoJeHHAWQJcNsXGEq','W6mWW7zeW7etidHMDG','b8o1WRxdKMZdGmkjfJVcGW','jadcSIzWFCoHWPdcR8oGwmkwFW','W6X84OclECkYWOtcRK/dN2O','tJurW6PQeL0JWPvZ','pLNdTZPMhmkQWQNcQSod','sgyhWQnPa1aNWOmS','FmkxW74RnSodwCke','Fq06qtBcLJ45Amkw','g8ooW6eWWOeolfv3WRu','WOxdM8kZWQ0ItCogcmk2ia','W7tdOCk1A8kDr2BcVgtcIW','4OE8ocPgg8ohnSk5WP3dJW','W4rDCCk5W6/dNgq','WQVcMmkvta','vmoXASkOEI3cQCode8kG','p8oYW6/cVM3cSuFcJ8oaAa','hmkNwxNdLCo9qmkTWRGc','W7tdH19osgJdUSkexCox','W4pdLCkxWOFdUaSFW6WvmW','WOK3janTvHDFo0ZdM1ZdTa','aYJdVSo7mdVdP8kdW5T9','u8kucmkAW7dcJeVcImkCWOO','WOCAC8k2W7pdKgvjmCkm','t8kjWQ7dRH41WR4','WRzUzw3cPaTEoqbj','W4quWOJdQSoDW4edfCosW68','stdcV1akW78VkmkWba','fSkVWQpdLtSrWOe','W6JcJ8kzW4JdJeqEWRWvmq','W5CmpZJcICkoW6DkW597','W74mbGldL3n2hJXC','WOhcKCkawSoqc3GdWODG','WPOusc/dIaSrWPldIey','E8oWW6JcGN7cRuhcGW','ErORqZxdNYq2lCov','WOyYWPpdU8ktW5PrfSodW7q','WRZcVSodzCoFWP9QpJqF','ECoXmNKFdCoSyJWG','WQe0WOqJeCkWxmokWRddRa','WPeDeWP4W47dGXjDta','WR3dHLSnvcFcTCkoxCku','W6ORwJSnW6LQr8o3Eq','dmooW642WOCzBu5TWQm','W4vBC8k+W77dHJWDBSoj','Amk4jNqnwCkQBIz7','W7eLWPBdUvDWgCkpd3y','a8onW7i7qhPEW79ZWPS','kSokW4nCbCogsCklWO0g','W5iuWOpdQG','W7q9W5xcVSkZW5aDgmkrW68','WQDKW6bcW7OioYbNAG','qCo5wHjmWQJcGIb1Aq','A8ocW5utcSkuq8kmWOag','D1VcUwWQC3G'];a1_0x298a=function(){return _0x280ad7;};return a1_0x298a();}import{registerCompatTool}from'./tools/compat.js';import{registerCompareTool}from'./tools/compare.js';const server=new McpServer({'name':SERVER_NAME,'version':SERVER_VERSION},{'instructions':a1_0x40cacd(0x1d8,')BKf')+a1_0x40cacd(0x26a,'X^R)')+a1_0x40cacd(0x287,'0a3)')+a1_0x40cacd(0x20c,')BKf')+a1_0x40cacd(0x2aa,'C%I$')+a1_0x40cacd(0x1f7,'s]5e')+a1_0x40cacd(0x1c7,'Z87@')+a1_0x40cacd(0x27c,'X8d)')+a1_0x40cacd(0x28c,'GbC0')+a1_0x40cacd(0x254,'u37Z')+a1_0x40cacd(0x262,'DL%%')+a1_0x40cacd(0x1f1,'u37Z')+a1_0x40cacd(0x1fb,'U79m')+a1_0x40cacd(0x2d5,'963b')+a1_0x40cacd(0x282,'2Oju')+a1_0x40cacd(0x255,'gZHb')+a1_0x40cacd(0x1b3,'^t9^')+a1_0x40cacd(0x1ce,'CnbT')+a1_0x40cacd(0x1f9,'aw9G')+a1_0x40cacd(0x258,')Io1')+a1_0x40cacd(0x225,'AE8&')+a1_0x40cacd(0x1b2,'^Ke^')+a1_0x40cacd(0x1e7,'K@94')+a1_0x40cacd(0x1d2,'JkD^')+a1_0x40cacd(0x2bf,'CnbT')+a1_0x40cacd(0x1e1,'62TJ')+a1_0x40cacd(0x21c,'s]5e')+a1_0x40cacd(0x2ad,'X8d)')+a1_0x40cacd(0x236,'u37Z')+a1_0x40cacd(0x1b5,'*0Z6')+a1_0x40cacd(0x2b9,'0a3)')+a1_0x40cacd(0x299,'x2jb')+a1_0x40cacd(0x24b,'U8YA')+a1_0x40cacd(0x276,'^fpt')+a1_0x40cacd(0x20a,'X8d)')+a1_0x40cacd(0x2d2,'4!YH')+a1_0x40cacd(0x1e3,'gZHb')+a1_0x40cacd(0x1b8,'vB2t')+a1_0x40cacd(0x1c5,'jV%^')+a1_0x40cacd(0x288,'Z87@')+a1_0x40cacd(0x2b3,')Io1')+a1_0x40cacd(0x261,'jV%^')+a1_0x40cacd(0x24a,'Tw@B')+a1_0x40cacd(0x23b,')BKf')+a1_0x40cacd(0x230,'*0Z6')+a1_0x40cacd(0x1f8,'K@94')+a1_0x40cacd(0x23d,'4!YH')+a1_0x40cacd(0x208,'TJY0')+'—\x20Detect\x20a'+a1_0x40cacd(0x1c0,'X8d)')+'\x20dependenc'+a1_0x40cacd(0x256,'odRU')+'tch\x20best\x20p'+a1_0x40cacd(0x2b1,'4!YH')+a1_0x40cacd(0x25b,'^Ke^')+a1_0x40cacd(0x1cb,'DL%%')+a1_0x40cacd(0x22b,'^fpt')+a1_0x40cacd(0x28f,'TJY0')+'\x20web\x20stand'+a1_0x40cacd(0x1bb,'AE8&')+a1_0x40cacd(0x25c,'h@pm')+'ssibility,'+a1_0x40cacd(0x1d6,'$I#i')+a1_0x40cacd(0x1ec,'jV%^')+a1_0x40cacd(0x1cc,'AE8&')+a1_0x40cacd(0x21d,'^t9^')+a1_0x40cacd(0x27d,'vB2t')+a1_0x40cacd(0x22a,'cXt$')+a1_0x40cacd(0x278,'6$f5')+a1_0x40cacd(0x2a1,'6$f5')+a1_0x40cacd(0x213,'yzrI')+a1_0x40cacd(0x1c3,'U8YA')+'\x20gt_change'+a1_0x40cacd(0x21f,'gZHb')+a1_0x40cacd(0x2c9,'IRgy')+a1_0x40cacd(0x1bf,'aw9G')+a1_0x40cacd(0x1d3,'^fpt')+a1_0x40cacd(0x222,'X8d)')+a1_0x40cacd(0x2c0,'h@pm')+a1_0x40cacd(0x2c7,'U79m')+a1_0x40cacd(0x28b,'x2jb')+a1_0x40cacd(0x22e,')BKf')+a1_0x40cacd(0x2a2,'K@94')+a1_0x40cacd(0x2b7,'gZHb')+a1_0x40cacd(0x23f,'X^R)')+a1_0x40cacd(0x2cf,'0&kE')+a1_0x40cacd(0x2a6,'DL%%')+a1_0x40cacd(0x24f,'DL%%')+a1_0x40cacd(0x2a7,'4!YH')+a1_0x40cacd(0x247,'u37Z')+a1_0x40cacd(0x2c8,'[KMy')+'by-side.\x0a\x0a'+a1_0x40cacd(0x215,'chzy')+a1_0x40cacd(0x1bc,'yzrI')+a1_0x40cacd(0x273,'jV%^')+a1_0x40cacd(0x2d7,'$I#i')+a1_0x40cacd(0x26b,')Io1')+a1_0x40cacd(0x1fd,'X8d)')+a1_0x40cacd(0x1dd,'K@94')+a1_0x40cacd(0x211,'^Ke^')+(a1_0x40cacd(0x264,'^t9^')+a1_0x40cacd(0x268,'h@pm')+a1_0x40cacd(0x2d0,'[KMy')+a1_0x40cacd(0x1e9,'^fpt')+a1_0x40cacd(0x1ef,'aw9G')+a1_0x40cacd(0x22c,'IRgy')+'{\x20projectP'+a1_0x40cacd(0x1e5,'U8YA')+a1_0x40cacd(0x2b6,'Z87@')+a1_0x40cacd(0x23c,'aw9G')+a1_0x40cacd(0x1eb,'gZHb')+a1_0x40cacd(0x29e,'$I#i')+a1_0x40cacd(0x2d1,'odRU')+a1_0x40cacd(0x2d6,'X8d)')+a1_0x40cacd(0x20e,'[KMy')+a1_0x40cacd(0x29b,'odRU')+a1_0x40cacd(0x29c,'Tw@B')+a1_0x40cacd(0x1f2,'gZHb')+a1_0x40cacd(0x1d5,')BKf')+a1_0x40cacd(0x204,'AE8&')+'ng\x20data.')});registerResolveTool(server),registerDocsTool(server),registerBestPracticesTool(server),registerAutoScanTool(server),registerSearchTool(server),registerAuditTool(server),registerChangelogTool(server),registerCompatTool(server),registerCompareTool(server),server[a1_0x40cacd(0x1bd,'h@pm')](a1_0x40cacd(0x2cb,'h@pm')+a1_0x40cacd(0x1c4,'U79m'),'Scan\x20this\x20'+a1_0x40cacd(0x218,'GbC0')+a1_0x40cacd(0x270,'aw9G')+a1_0x40cacd(0x1cd,'chzy')+a1_0x40cacd(0x1b7,'uS18')+a1_0x40cacd(0x20d,'^Ke^')+a1_0x40cacd(0x1cf,'U8YA')+a1_0x40cacd(0x1e4,'6$f5')+a1_0x40cacd(0x29d,'C%I$'),()=>({'messages':[{'role':a1_0x40cacd(0x2b4,'UL9*'),'content':{'type':a1_0x40cacd(0x29f,'UL9*'),'text':a1_0x40cacd(0x245,'U79m')+a1_0x40cacd(0x277,'*0Z6')+a1_0x40cacd(0x237,')Io1')+a1_0x40cacd(0x1d7,'gZHb')+a1_0x40cacd(0x1b4,'s]5e')+a1_0x40cacd(0x271,'chzy')+a1_0x40cacd(0x27e,'&Bx9')+a1_0x40cacd(0x2ba,'$I#i')+a1_0x40cacd(0x206,'Tw@B')+a1_0x40cacd(0x293,'&Bx9')+a1_0x40cacd(0x295,'U79m')+a1_0x40cacd(0x2c2,'odRU')+'js,\x20TypeSc'+a1_0x40cacd(0x21b,'s]5e')+a1_0x40cacd(0x26c,'v4[N')+a1_0x40cacd(0x284,'^t9^')+a1_0x40cacd(0x216,'chzy')+a1_0x40cacd(0x253,'AE8&')+a1_0x40cacd(0x232,'K@94')+'e\x20best-pra'+a1_0x40cacd(0x1c1,'cXt$')+a1_0x40cacd(0x25f,'X8d)')+a1_0x40cacd(0x244,'JkD^')+'o\x20change\x20a'+a1_0x40cacd(0x229,'&Bx9')+a1_0x40cacd(0x207,'GbC0')+a1_0x40cacd(0x1ba,'jV%^')}}]})),server[a1_0x40cacd(0x209,'1!um')](a1_0x40cacd(0x25e,'h@pm')+a1_0x40cacd(0x200,'DL%%'),a1_0x40cacd(0x1ff,'*0Z6')+a1_0x40cacd(0x1b9,'C%I$')+a1_0x40cacd(0x297,'Tw@B')+a1_0x40cacd(0x1ea,'C%I$')+a1_0x40cacd(0x210,'U79m')+a1_0x40cacd(0x231,'jV%^')+a1_0x40cacd(0x27f,'rTAy'),{'library':z[a1_0x40cacd(0x1df,'yzrI')]()[a1_0x40cacd(0x252,'uS18')](a1_0x40cacd(0x214,'[KMy')+a1_0x40cacd(0x217,'U8YA')+a1_0x40cacd(0x1be,'aw9G')+a1_0x40cacd(0x22d,'62TJ')+',\x20\x27prisma\x27')},({library:_0x22f437})=>({'messages':[{'role':a1_0x40cacd(0x2b0,')BKf'),'content':{'type':a1_0x40cacd(0x298,'x2jb'),'text':a1_0x40cacd(0x241,'chzy')+a1_0x40cacd(0x2ca,'cXt$')+a1_0x40cacd(0x26f,')BKf')+a1_0x40cacd(0x250,'[KMy')+a1_0x40cacd(0x296,'963b')+a1_0x40cacd(0x2be,'2mkX')+_0x22f437+(a1_0x40cacd(0x1d1,'[KMy')+a1_0x40cacd(0x294,'4!YH')+a1_0x40cacd(0x2cc,')BKf')+a1_0x40cacd(0x226,'^Ke^')+a1_0x40cacd(0x28a,')BKf')+a1_0x40cacd(0x2bc,'TJY0')+a1_0x40cacd(0x263,'6$f5')+a1_0x40cacd(0x219,'$I#i')+a1_0x40cacd(0x2cd,'u37Z')+a1_0x40cacd(0x24c,'U8YA'))}}]})),server[a1_0x40cacd(0x1d0,'AE8&')](a1_0x40cacd(0x281,'x2jb')+a1_0x40cacd(0x2b5,'IRgy'),a1_0x40cacd(0x1ee,'$I#i')+a1_0x40cacd(0x223,'U79m')+'ctices\x20for'+a1_0x40cacd(0x1e0,'0a3)')+a1_0x40cacd(0x251,'jV%^')+'is\x20project',()=>({'messages':[{'role':a1_0x40cacd(0x235,'963b'),'content':{'type':'text','text':a1_0x40cacd(0x272,'DL%%')+a1_0x40cacd(0x1f4,'1!um')+a1_0x40cacd(0x2c6,'*0Z6')+'\x20dependenc'+'ies\x20in\x20thi'+a1_0x40cacd(0x291,'K@94')+a1_0x40cacd(0x2bb,'s]5e')+a1_0x40cacd(0x2a5,')Io1')+a1_0x40cacd(0x1b1,'DL%%')+'tices\x20for\x20'+a1_0x40cacd(0x1d4,'AE8&')+'Highlight\x20'+a1_0x40cacd(0x2ce,'odRU')+a1_0x40cacd(0x1e8,'TJY0')+a1_0x40cacd(0x2a4,'vB2t')}}]})),server[a1_0x40cacd(0x203,'DL%%')]('compare-li'+a1_0x40cacd(0x25a,'0&kE'),a1_0x40cacd(0x1c2,'Z87@')+a1_0x40cacd(0x2c1,'s]5e')+a1_0x40cacd(0x286,'62TJ')+a1_0x40cacd(0x242,'v4[N')+a1_0x40cacd(0x290,'^Ke^')+a1_0x40cacd(0x239,'DL%%')+a1_0x40cacd(0x234,'4!YH'),{'libraries':z[a1_0x40cacd(0x1da,'GbC0')]()[a1_0x40cacd(0x22f,'TJY0')](a1_0x40cacd(0x248,'gZHb')+a1_0x40cacd(0x2ac,'u37Z')+a1_0x40cacd(0x2ae,'&Bx9')+'\x20e.g.\x20\x27pri'+'sma,\x20drizz'+a1_0x40cacd(0x1db,'u37Z')+a1_0x40cacd(0x2ab,')BKf')+'ibot,\x20yup\x27')},({libraries:_0x1b2118})=>({'messages':[{'role':a1_0x40cacd(0x275,'s]5e'),'content':{'type':a1_0x40cacd(0x1c9,'$I#i'),'text':a1_0x40cacd(0x1f5,'^t9^')+a1_0x40cacd(0x28e,'AE8&')+a1_0x40cacd(0x1ed,'U79m')+a1_0x40cacd(0x292,'aw9G')+a1_0x40cacd(0x26d,')Io1')+a1_0x40cacd(0x1de,'vB2t')+_0x1b2118+(a1_0x40cacd(0x1c6,'4!YH')+a1_0x40cacd(0x24e,'JkD^')+'ferences,\x20'+a1_0x40cacd(0x20f,'^Ke^')+a1_0x40cacd(0x2a9,'6$f5')+a1_0x40cacd(0x1fa,'yzrI')+a1_0x40cacd(0x279,'^Ke^')+a1_0x40cacd(0x212,'1!um'))}}]})),server[a1_0x40cacd(0x203,'DL%%')](a1_0x40cacd(0x202,'yzrI')+a1_0x40cacd(0x1e2,'2Oju'),a1_0x40cacd(0x2bd,'2mkX')+a1_0x40cacd(0x285,'X^R)')+a1_0x40cacd(0x221,'jV%^')+a1_0x40cacd(0x220,'2Oju')+a1_0x40cacd(0x1f6,'*0Z6')+a1_0x40cacd(0x280,'UL9*')+a1_0x40cacd(0x266,'odRU')+a1_0x40cacd(0x246,'TJY0'),{'topic':z[a1_0x40cacd(0x2d4,'0&kE')]()[a1_0x40cacd(0x289,'*0Z6')](a1_0x40cacd(0x23e,'2mkX')+a1_0x40cacd(0x1b6,'^t9^')+a1_0x40cacd(0x1fe,'chzy')+a1_0x40cacd(0x1e6,'JkD^')+a1_0x40cacd(0x227,')BKf')+a1_0x40cacd(0x2d3,'62TJ')+a1_0x40cacd(0x2a3,'U79m')+a1_0x40cacd(0x2af,'DL%%'))},({topic:_0x51a434})=>({'messages':[{'role':a1_0x40cacd(0x2a0,'^fpt'),'content':{'type':a1_0x40cacd(0x20b,'Tw@B'),'text':a1_0x40cacd(0x201,'2mkX')+a1_0x40cacd(0x21a,'U79m')+a1_0x40cacd(0x2c4,'1!um')+a1_0x40cacd(0x238,'^fpt')+'uidance\x20an'+a1_0x40cacd(0x29a,'3]ej')+a1_0x40cacd(0x1f0,'2Oju')+a1_0x40cacd(0x28d,'4!YH')+'\x20'+_0x51a434+(a1_0x40cacd(0x23a,'v4[N')+a1_0x40cacd(0x224,'3]ej')+a1_0x40cacd(0x267,'3]ej')+a1_0x40cacd(0x2a8,'0a3)')+a1_0x40cacd(0x265,'DL%%')+a1_0x40cacd(0x25d,'odRU')+a1_0x40cacd(0x240,'v4[N')+a1_0x40cacd(0x1d9,'JkD^')+a1_0x40cacd(0x27a,'^t9^')+'\x20reference'+'s.')}}]}));async function main(){const _0x5e4208=a1_0x40cacd,_0x1acfff=new StdioServerTransport();await server[_0x5e4208(0x274,'&Bx9')](_0x1acfff),console[_0x5e4208(0x233,')BKf')](SERVER_NAME+'\x20v'+SERVER_VERSION+('\x20running\x20v'+_0x5e4208(0x249,'CnbT'))+getInstallId()+']');}main()[a1_0x40cacd(0x243,'jV%^')](_0x46f5fc=>{const _0x185f15=a1_0x40cacd;console[_0x185f15(0x1f3,'v4[N')](_0x185f15(0x228,')BKf')+'r:',_0x46f5fc),process[_0x185f15(0x2b2,'1!um')](0x1);});
|
|
2
|
+
const a1_0x42d9bd=a1_0xbd2c;(function(_0x3334ec,_0x39ffdb){const _0x1a9efd=a1_0xbd2c,_0x129a51=_0x3334ec();while(!![]){try{const _0x571b53=-parseInt(_0x1a9efd(0x12f,'GitB'))/0x1*(-parseInt(_0x1a9efd(0x1d6,'ihdT'))/0x2)+-parseInt(_0x1a9efd(0x17f,'4!*N'))/0x3+-parseInt(_0x1a9efd(0x1c8,'PTsH'))/0x4*(-parseInt(_0x1a9efd(0x1b6,'hYbD'))/0x5)+-parseInt(_0x1a9efd(0x13c,'BIae'))/0x6*(parseInt(_0x1a9efd(0x155,'YKSx'))/0x7)+-parseInt(_0x1a9efd(0x238,'8R8Y'))/0x8+-parseInt(_0x1a9efd(0x131,'HjYu'))/0x9*(parseInt(_0x1a9efd(0x197,'hR&c'))/0xa)+parseInt(_0x1a9efd(0x1e8,'iJxz'))/0xb;if(_0x571b53===_0x39ffdb)break;else _0x129a51['push'](_0x129a51['shift']());}catch(_0x4d006a){_0x129a51['push'](_0x129a51['shift']());}}}(a1_0xa900,0xf2a23));import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';function a1_0xbd2c(_0x5b340f,_0x15589b){_0x5b340f=_0x5b340f-0x12b;const _0xa90085=a1_0xa900();let _0xbd2c52=_0xa90085[_0x5b340f];if(a1_0xbd2c['gjMpry']===undefined){var _0xd5c529=function(_0x8d602d){const _0xf34389='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x59dfc8='',_0x2b8085='';for(let _0x4884c9=0x0,_0x1ba5fc,_0x141c27,_0x388c94=0x0;_0x141c27=_0x8d602d['charAt'](_0x388c94++);~_0x141c27&&(_0x1ba5fc=_0x4884c9%0x4?_0x1ba5fc*0x40+_0x141c27:_0x141c27,_0x4884c9++%0x4)?_0x59dfc8+=String['fromCharCode'](0xff&_0x1ba5fc>>(-0x2*_0x4884c9&0x6)):0x0){_0x141c27=_0xf34389['indexOf'](_0x141c27);}for(let _0x5eb69d=0x0,_0x33d034=_0x59dfc8['length'];_0x5eb69d<_0x33d034;_0x5eb69d++){_0x2b8085+='%'+('00'+_0x59dfc8['charCodeAt'](_0x5eb69d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2b8085);};const _0x492806=function(_0x1eb6aa,_0x31b1fb){let _0x1f6346=[],_0x193dd0=0x0,_0x64b712,_0x36a9c6='';_0x1eb6aa=_0xd5c529(_0x1eb6aa);let _0x19d7be;for(_0x19d7be=0x0;_0x19d7be<0x100;_0x19d7be++){_0x1f6346[_0x19d7be]=_0x19d7be;}for(_0x19d7be=0x0;_0x19d7be<0x100;_0x19d7be++){_0x193dd0=(_0x193dd0+_0x1f6346[_0x19d7be]+_0x31b1fb['charCodeAt'](_0x19d7be%_0x31b1fb['length']))%0x100,_0x64b712=_0x1f6346[_0x19d7be],_0x1f6346[_0x19d7be]=_0x1f6346[_0x193dd0],_0x1f6346[_0x193dd0]=_0x64b712;}_0x19d7be=0x0,_0x193dd0=0x0;for(let _0x2155cd=0x0;_0x2155cd<_0x1eb6aa['length'];_0x2155cd++){_0x19d7be=(_0x19d7be+0x1)%0x100,_0x193dd0=(_0x193dd0+_0x1f6346[_0x19d7be])%0x100,_0x64b712=_0x1f6346[_0x19d7be],_0x1f6346[_0x19d7be]=_0x1f6346[_0x193dd0],_0x1f6346[_0x193dd0]=_0x64b712,_0x36a9c6+=String['fromCharCode'](_0x1eb6aa['charCodeAt'](_0x2155cd)^_0x1f6346[(_0x1f6346[_0x19d7be]+_0x1f6346[_0x193dd0])%0x100]);}return _0x36a9c6;};a1_0xbd2c['ozlOwF']=_0x492806,a1_0xbd2c['YCGXYJ']={},a1_0xbd2c['gjMpry']=!![];}const _0x93ac4d=_0xa90085[0x0],_0x5adb57=_0x5b340f+_0x93ac4d,_0x5c23c9=a1_0xbd2c['YCGXYJ'][_0x5adb57];return!_0x5c23c9?(a1_0xbd2c['KJREdF']===undefined&&(a1_0xbd2c['KJREdF']=!![]),_0xbd2c52=a1_0xbd2c['ozlOwF'](_0xbd2c52,_0x15589b),a1_0xbd2c['YCGXYJ'][_0x5adb57]=_0xbd2c52):_0xbd2c52=_0x5c23c9,_0xbd2c52;}import{SERVER_NAME,SERVER_VERSION}from'./constants.js';import{getInstallId}from'./utils/watermark.js';import{checkForUpdate,formatUpdateNotice,setPendingUpdate}from'./utils/version-check.js';function a1_0xa900(){const _0x4d6199=['WQu3n3NdU8okBCkloCkh','W5TpWRJdO8oRheWKxCk8','WQ91wCksW7tcG8outmo2kW','W7HzWPZdVCoLiSo5eCoSra','krz0WORdHEkcQemPWOdcMW','W5njWPhcVmo1jmoItCk3fa','WR1/dCkcW7/dGSoobmoNyW','WOVdQctdHYiTgq','WRn6WOFcSqFcHSoZ','W6XEyv7cHafFr2XE','WO7dSMBdHteWcSosWP/dKa','WRxcNSknbIn7irJcHx4','W6GAWRBcUmo0m8kQnCk+vq','W7f9WOFcVG','WO/dHHBdRv8fWRBdTmo+W7i','W5tcSCkiW7aKBYNdQ1BdHG','W7BdRmkfW4pdH8o/W7RcUq','pSoBW5ntW7nNW67dPNCR','WOVdSNZcV3jXqmoqWOJdUW','WOVcGfVdPUkcNSkNb8kjWOeU','fYpcVGRcPSkhb8kyW53cISoKWRFcLa','W5XZwfDKcSonW7HEBq','W6nfWPGweCkdWQT/WPNdPq','WPlcKmogrSk6yHBdKCkMW7C','tgpdLCoRFgVcO8oEyCo/','xConWPaqjSoUW6VdR8kuBq','bYmGwhu6WPNcImopnW','WRj4nmkuWRS0WQ4','FmktuY/dLSokW4hdK8k3WQy','EtX0WO3cHSouqWpcImkb','W79xWPxdSCkNi8o4dmk2tG','zCkSihddUsRdTftcJSog','x8olWPCyB8oG','sCkzW6hdPGNcSvesW7mBW4Xcnq','D1PyWPFcHSoqfGVcJmov','w8keW50CW7j1W5JdONS+','omk1ibNcN8oAW4hdGCoZWQu','WQLZhmksWRVdGSoChSoJlG','W4bkWR7cT8o1f0a0fCo6','WP3cIKFdPSo+W6H0WOZcIs4','pGHWWP3cJmosbe/cImov','W5OoWR3dSSo2heeYgCo6','relcIJBdKb05','WPu2WQhdPmkpiYVdTrddGW','z05NW7G','W408mdtcT8k6CCkni8kh','W6mOlCo7W6dcTtFdMaT7','hIJcNfZcLmowWOjBBYu','4OA3dSonjSoGdc/cSmoLWOq','hJbLxwqWWOtcJSkaaG','WR5pyuJdJG1seZHv','o0HjWPbPW6amW6j2','WRpdHXdcUeqFWRhdUmk7W7u','lSk2W7ldNh02iSkfW4JdRW','WPFdSYNdMdmR','W6Lnh8k9WRWXWQJcK+kgUgi','reddK3ldJX8+WRFdR8kA','C05NWQOAiSoKW7WJlq','yb1HW6uqkmkWW7aJFG','wxeww305WOZcK8ojiW','W6BdU8kxW4tdKmo5W77cULhdMa','W7hdMCknmsq+pG3cRMS','W4hcMSolu8k3yHJcN8kVWR4','W4HaWR/cT8oGduW2fSkZ','WP9RW6Hw','WRNcJ1xdUu4pWQFdVSkTW68','oCkSW6tdHJ8Sj8kiW5NcUW','W5XUt0W+ECoRWPTJFG','W71mhSoUW7DLW7NdLKK3','WQ7dIuy6waJdGSk1oG4','WPddSIpdH2WTfCozWOJdJq','btxdTLFdU8kDh8kPW5NcSq','WP9MW7ucW6pdNLW8WPBcOG','WRq6gSkjW7BcJmoDcCkIiG','WQL7n8oXW7tdSdtdIqTS','W74FiqpdL1ieDcLQEIP7','W69BcmoRWR43','WPxcVqi3xGJcMmkFFvi','WQv4WOFdSchcMmoOWRBdM3q','W7KEhCoPW7SJW6xdGqOz','WQe2W7DFW4aPW7rsW59T','WQa5lMJdTSkyBCozp8kF','W4TVW75gWQ/dNKyGW4xcPa','W6jDWPhcSCoOimkQeCkJfa','WPDIWQzkl8kcoCozW4eM','WPtdSJpdKdb9qokePCoCW4m','D8kQfMxdTx7dV2tcNSow','uCkBWO8CW6y','v3pdUf3dU8kru8k2W5RcRW','WQeoWRFcVd3dGHbmcmkY','WR/dTa5llZ0eW4RdRSkm','W5/dS081i8kHWPBcSmo5CG','fmkBWOGDW7P6W5/dPJiP','fIqXqu8NWO7cGmooEq','WOW6WRVcOCouwqZdLrdcGq','p8oWCXRcLCoxW5BdM8kNWRO','DvlcKe4VrCkBWPVcLCkP','pIySf8oBW6NdJmk/WPXn','W4/cJLVcMCoRW7iWWOpcLga','qN3dTLJcTSoPWPzq','dSoAWQBcUv/dPq','WRhdS0PhoNmbWP3dICoj','k8kIBXxcK8obW5ddOSkYWRC','WRddTSoRsuXZv3ddGay','W4rEWRRdPCoNx10/gmkP','W7fWWPRcPa','WO47WQZdPmkopcBdTaZcIW','WOHVW6rbW6C','W7zMWOVcSJ/cNmoGWRBcGIW','W7NcQmkoW6HNBY/dUfRdLG','WRuIzCo7W6xcTsNdMeHR','thFdVXJdVSoFw8o/W57cUa','fJ8HdNyXWPNcGSoiEq','W75FWPFcUmoPm8kQf8kPwa','WRFdT8kLx1TZr3RdHfu','W5rLWQznl8oCE8oMWOKH','W6GpW50','jK5uWPC','W4eZWQZcSmkzoYBdRrBcMa','W5/cTh/cGNSUkmoJWQ3dTmop','hSkGW4vzW59+W45GEWa','W5OoWQVdPCoTfuW0cCo6','W5BcQ8oCW6bIoYFdRv7dJa','v8kDWPqCW7O0WP3cOtuv','W6a9W6jhW4yYW7ryW4r0','WQBcJfyWwa/dJmoEyuW','W7RcS8owWOlcM8k0WRJcOqVdVG','W7FcQG4jpdSnWOFcKmkE','W6SjW4rtoCkpWRWSW5dcPa','fmocWQdcTupdPWn1W4K6','fX7cK2pcI0SfWRddUCk5W4vO','W4lcUmkQcwGYCG3cUw0','WRmOyG','WQ3dLHddQLrwW6lcR8kfW7i','WQhcHK8LwGNcICksyuK','W5v5WOFcSsxcLCkPWRFcIgu','uMpcUSoptg3dV8kqyCoQ','r8kkWPCrECk6WQpdTSkbza','asxdU8o6kelcUSoqyCoW','iqJdTgFcM0XFc8kLW5W','WR8dW7tcUcBdJH9As+kdKG','WOZIGOydvGJcO8kfWQtdPNi','WO9NW75fWQhcTrb3W4xcSq','WPfLW6ejh8kcFmk/W4y3','rSozWPag','gColWQFcS0pdQWuW','WRm+nSo7W7VdOZ/dOKD3','eJNdLvdcLCkv','y8kEAt7cSSojW6W','W6FcHSocbCk1nIBdJmkMWRy','gheQxdaGWOxcK8ofpa','WOZdSezMe8oUWOxcT8o1Da','WQW0W6at4OkXESksuCozyq','kb/cOd/cM1PFhmk0WPS','WQD1WQCuW4S/WQXaW4DX','W4/cNKRcPmkQW7qGWOVcJIq','W4FdPdddKdeMqmoBWPxdHG','W6lcJ00NgXRcGmotlum','W5tcUCkiW6bRDwBdQeVdGa','WPmoW6RdQG','W4NdUmkpW71LDYpcU0VdLW','tsBcV8oTEK7dSCkClSoR','WPeBW6lcOmk6dMedlmkkna','W7ZdJXZdUL8nWRddPmk7W7u','WO8yW7ZcUmoaWQldJSotWQ9w','W63cLKdcQX1BW7hcVSk4W6NdVL80oq','W4TVwfCKlSonWRfMDa','W7tcMSknDwfqnXtcRIa','W6XXWOFdSclcN8kPWQBcNMm','WO1HW6jhWQ/dILG+WPFcTW','WRv7imo1W7tdVxRdM0jY','WQG2wCkcW7JcHSoFtmoNoW','atBdOCoNkedcT8opjmoQ','WRj5W6NcPCkpj27cOqZcMG','W5BcSqZdKG4nbmoD','g8kQg1yCWO8DWQNdTIO','BqRcU2ddIW','WPm0WRVcVCoAphtcOq/cJW','WQS/jhddU8kdB8krp8oi','W5ThWQ/dRSkUx0G0hSk/','WOFdH8kremoNC0/cJmkiWR50W5esWOa','CghdQrJdUmofymk8W5dcVa','EKRdHthdJf7IGz7dO8omWO0','x8ko4OwgW7bwW7y4mmotiG','WQi+W7rhWOGQWQzvW452','W740WQLajmkvoCo+W4O2','b8kDW4bcmSo9WRxdGCkRxCoAkCka','jJ7dMr/cNmopWQ1BBJG','W4lcH8oismkInG','WQ0yW5KwnSkcW7KwWRJcPa','WQldJCobB3mTyc7cK2aTWQNcSG','W6GpW4nepSkyWQb/W5tdIW','W68Eg8oZWR9LW7NdM0u1','fmknWPGdW7f9W5xdPhW8','W7NdOuy1amk6WQRcPSo7EG','D1fNW6ShkmkWW7C/Eq','W51YuuW+ECoNW51EAq','WPz/WQnapSkinCk/W5C3','Er8/WP7dI8kCrb/cM8kC','W7LkWPpcR8oMi8oVsmkVxa','WQ1/jSknW77cGmoidCoWoG','WRL4DCknWRCOW73cRmkuWOy','WPRdVuz0nSk4WO8','qq7dMdFdNHjNWRtdPCkA','W4L8WOdcOJFcGSoWW6lcJ28','WRlcM004sW8','W4yjW6RdU8obWQlcH8owWRjA','jmkBWRavW5u8mSkrxmkW','eSoXWQFcS1ddReCHW4rJ','W6i4W69wW4yXW7rVW5LT','nIONaSkfWQ3dHSoMW4Wo','W6jHWR3cSZNcNCo5WQpcIwu','WPq3mxBdVSkeBW','WQxdO10olZaiW4tcGSoC','n1XdWPeVW6bdWQnVWR0','WR5pCexcHWDzqgXB','iX/dTgxcJGHnf8kVWOC','WPv6W69aoCkcBmo6W5D+','u8ktW4fzW48FW6rdzqm','W55VsfCVlSonWOiFoW','kH9YWOZcL8ovfXBdHmkw','WRfPvCobW4pcM8okcCoria','asldVmoMkftcVSoviSoX','WPK2WOegW5BdJmo+WPtcQcm','WPTKW69ijmkioCoZW40W','WPqsW6xdVCokWRG','WRBcGeeWsfVcISoqFXO','WOL3WR1rW6BdM013W6/dPW','WQzszaW','WPRcMKRcTa','WO4GWRVcP8kFicBIGPvFWOa','e8onWRhdSf7dReC0WOS1','CL9dWPmTW7bbWOKRW7y','WQTJDKlcNqvBvG','qcJdOfhdSCouh8kZW5FcVG','WRLKm8kuWRmIWQNcUSkiWOm','W5rnWRBcQCkDW7NcOCouWRrUW5Ok','l8k1EaS','WR/dLXZdU0GFW6ldQ8kXW7q','W6pIHRGThWLiWP4Rg8kL','WO7cH0VdPSoUW6G3WPNdGbu','WOLwv8obW5tcG8owamkInW','WQKdW6pcQw/dIrvkhSkR','fCoPj1ahWP1tWQNcVIy','4OcVW6KWxrZcJXdcQCo2iG','u8k0W4XmW4KAWQbeEq8','W79oW5tcKSoqbSoznCoSuW','W5O2WQHDfCkcFmo+W5yX','WQ0Ym8oXWRFdSYJdKKy+','WOb/WQXmoCorF8oWW5zY','WRGRimk0W7hdUI/dK08Y','W5r0WQPApSorACoTW4uX','WQGqW7hcOZ3dGbThcmkJ','pbTIWPZdHCosdbVcJmkg','WOBdR27dJJ52ASkvWONdLW','W7uqt8opWRFcHCoom8oJnG','WQfyBaOen8kslWxcTa','WO9RW6nbW73dLKO8','fCopWRRcT1tdSuT1W4OT','W4/cHL3dPSojW5qhW4RcHIu','W5dcTx7cG3fSuSo1WRxdISoFWRVcJq','W47dUokdQmkPqMKJW75zW4O','eIiXdNiXWP7cLCkakq','zKhdHZ/dNLm5WQBdUSkj','W64dW5HymSkpWQ0','WQddTmoXtuP7wNFcJaK','W7pdOmkyW4NdM8oXWRJcUepcGa','D09WW6ug','s8k7g1inWOKhW73cScW','bSkJW4Xo','W6hcQSktW7XQFXldQuRdKq','kb7cPYJdI0rxhCkYWPm','CmkXd2xcOh7dLwtcMCoa','WOPJW6boW6RdJaGWWOpdTG','WRn+pmkfWRDXWRVcOCkfWOu','W4dcSCkiW7OKEspdQeVcIW','W6tdPfTLdtec','WRXFfmoKW7SXW6xdG0mH','x8odWPCgA8k8W7RdM8orjq','WRj4mmkhWRK4WRpcR8oDWOm','W618WPhdSddcMCo7WRhcJY4','WOn1WRRcSmkBpwldOa3cIG','tIFdT8kIBKZcPmkCm8o8','btRdOfNdPSoEsSkRWPtdVq','WQnEELldGKrzhsSt','W5C74OcPbr9UWQ7dJvrP','W4BcQSoesSk/mHJdI8oJ4Ood','qgddVLFdRq','WRhdTfCoid8bWOhcL8kv','uuVdKIy','W71mWRFcQZVdSH9rcSkR','W6e6zCoJW7ldT3RdVhTx','W5pcSCkyW6HQEcpcU17dIW','WR0hW6xcQIddNXDibCkL','WQ1nz1JcJqfpfgaD','WQHRomkwWR40WQ7dQmksWOy','WQmoWQ/dT8oBW6ZcNCoxWQjC','WOv1WQxcRCkjjYBdRbBcIq','WQblErSv','WOSLWPirWO/cMokcHCkuWPKP','rfJdIZVdKX8OWQ/dR8oe','bSkyW4nbp8o/WRxcTCk4BmoNcmkfoW','WP9rW7fxW6VdLLXXWP7dTG','W44eW5nvpmomWQS6WPddOq','W79FdSo+WRm','W5/dPLf8cCkP','WOpcJq/cPCoLW6mXW4RcHtG','W6hdOmksW4xcJ8k2','WOH/gmktW7tcISkAi8ovaG','WPe2WQnakmkdEmoTW403','s1RdIYBdLHeKW6pdQ8kg','wSkoW50qW7XYW5/dPNCS','w8kBW50sWRr/W5JdO2a+','BCoxWP03W6acASkrxmk1','W5ZdOeX4f8k6','mdGHfCo0WQ/cN8oUWPuJ','b8oiWOa/sCkHW60','W53cK8obtmkXkXJdK8oJWQq','WP3cPXyMv8o5W4BdTSoYEdtdPmkddq','WP98sxOPAmkMW5vwFG','W69Bfmo5WPCQW63dLemS'];a1_0xa900=function(){return _0x4d6199;};return a1_0xa900();}import{z}from'zod';import{registerResolveTool}from'./tools/resolve.js';import{registerDocsTool}from'./tools/docs.js';import{registerBestPracticesTool}from'./tools/best-practices.js';import{registerAutoScanTool}from'./tools/auto-scan.js';import{registerSearchTool}from'./tools/search.js';import{registerAuditTool}from'./tools/audit.js';import{registerChangelogTool}from'./tools/changelog.js';import{registerCompatTool}from'./tools/compat.js';import{registerCompareTool}from'./tools/compare.js';import{registerExamplesTool}from'./tools/examples.js';const server=new McpServer({'name':SERVER_NAME,'version':SERVER_VERSION},{'instructions':a1_0x42d9bd(0x242,'hMPb')+a1_0x42d9bd(0x251,'^B)F')+a1_0x42d9bd(0x18f,'HjYu')+a1_0x42d9bd(0x26a,'hYbD')+a1_0x42d9bd(0x140,'ywhG')+a1_0x42d9bd(0x188,'4U7P')+a1_0x42d9bd(0x149,'^B)F')+a1_0x42d9bd(0x243,'uFA)')+a1_0x42d9bd(0x159,'sNmO')+a1_0x42d9bd(0x20a,'f8T@')+a1_0x42d9bd(0x24d,'AMLM')+a1_0x42d9bd(0x1bc,'xUmL')+a1_0x42d9bd(0x1f3,'pU8*')+a1_0x42d9bd(0x1b7,'@uuc')+a1_0x42d9bd(0x169,'Dkzp')+'\x20(WCAG),\x20p'+a1_0x42d9bd(0x230,'aZOM')+a1_0x42d9bd(0x203,'oISg')+a1_0x42d9bd(0x1e1,'AMLM')+a1_0x42d9bd(0x195,'Fm4E')+'atabases,\x20'+a1_0x42d9bd(0x21f,'Y3Nl')+'ture,\x20and\x20'+a1_0x42d9bd(0x192,'AMLM')+a1_0x42d9bd(0x146,'8R8Y')+a1_0x42d9bd(0x1c6,'ahKw')+a1_0x42d9bd(0x25f,'4kW!')+a1_0x42d9bd(0x172,'iJxz')+a1_0x42d9bd(0x234,'u@@0')+a1_0x42d9bd(0x1f1,'pU8*')+a1_0x42d9bd(0x224,'CGb4')+a1_0x42d9bd(0x225,'sNmO')+a1_0x42d9bd(0x24c,'BIae')+a1_0x42d9bd(0x145,'58eH')+a1_0x42d9bd(0x1ea,'hYbD')+a1_0x42d9bd(0x15f,'AMLM')+a1_0x42d9bd(0x226,'aZOM')+a1_0x42d9bd(0x23d,'sIjt')+a1_0x42d9bd(0x1b5,'YKSx')+a1_0x42d9bd(0x21c,'f8T@')+a1_0x42d9bd(0x13f,'@uuc')+a1_0x42d9bd(0x1c0,'aZOM')+a1_0x42d9bd(0x151,'slFg')+a1_0x42d9bd(0x23a,'bMw(')+a1_0x42d9bd(0x20b,'4!*N')+a1_0x42d9bd(0x12b,'58eH')+'ry.\x0a4.\x20gt_'+a1_0x42d9bd(0x191,'bMw(')+a1_0x42d9bd(0x228,'Pa8(')+a1_0x42d9bd(0x18d,'aZOM')+a1_0x42d9bd(0x1f5,'58eH')+a1_0x42d9bd(0x1a3,')$2#')+a1_0x42d9bd(0x137,'ywhG')+a1_0x42d9bd(0x135,'ihdT')+a1_0x42d9bd(0x18e,'GrO7')+a1_0x42d9bd(0x22b,'4U7P')+a1_0x42d9bd(0x239,'hMPb')+a1_0x42d9bd(0x1a6,'sIjt')+a1_0x42d9bd(0x1cf,'CGb4')+a1_0x42d9bd(0x178,'rHrx')+a1_0x42d9bd(0x1e7,'ihdT')+a1_0x42d9bd(0x1a0,'BIae')+a1_0x42d9bd(0x249,'rHrx')+a1_0x42d9bd(0x233,'sNmO')+a1_0x42d9bd(0x147,'CGb4')+a1_0x42d9bd(0x13d,'4!*N')+a1_0x42d9bd(0x24e,'xUmL')+a1_0x42d9bd(0x20d,'4U7P')+a1_0x42d9bd(0x1b0,'[9F5')+'e\x20fixes\x20fr'+a1_0x42d9bd(0x157,'58eH')+a1_0x42d9bd(0x179,'mj#e')+a1_0x42d9bd(0x132,'^B)F')+a1_0x42d9bd(0x1cc,'[9F5')+a1_0x42d9bd(0x17e,'ahKw')+a1_0x42d9bd(0x1f7,'io0P')+a1_0x42d9bd(0x1c3,'4U7P')+a1_0x42d9bd(0x1dd,'7zdE')+a1_0x42d9bd(0x1c2,'7zdE')+a1_0x42d9bd(0x252,'iJxz')+a1_0x42d9bd(0x20e,'C7II')+a1_0x42d9bd(0x17a,'8R8Y')+a1_0x42d9bd(0x163,'hR&c')+a1_0x42d9bd(0x1f8,'^B)F')+a1_0x42d9bd(0x257,'ahKw')+a1_0x42d9bd(0x237,'CGb4')+a1_0x42d9bd(0x20f,'^B)F')+a1_0x42d9bd(0x207,'BIae')+a1_0x42d9bd(0x1c1,'HjYu')+'\x202–3\x20libra'+a1_0x42d9bd(0x176,'Dkzp')+a1_0x42d9bd(0x217,'7zdE')+a1_0x42d9bd(0x256,'aZOM')+a1_0x42d9bd(0x138,'slFg')+a1_0x42d9bd(0x1ff,'hYbD')+a1_0x42d9bd(0x266,'CGb4')+a1_0x42d9bd(0x184,'[9F5')+a1_0x42d9bd(0x14c,'xUmL')+a1_0x42d9bd(0x214,'4U7P')+a1_0x42d9bd(0x1e5,'AMLM')+(a1_0x42d9bd(0x1da,'^B)F')+a1_0x42d9bd(0x194,'fXq4')+a1_0x42d9bd(0x16b,'rHrx')+a1_0x42d9bd(0x153,'Ozbq')+a1_0x42d9bd(0x232,'8R8Y')+a1_0x42d9bd(0x183,'rHrx')+a1_0x42d9bd(0x24a,'GitB')+a1_0x42d9bd(0x164,'hYbD')+a1_0x42d9bd(0x1fc,'sNmO')+a1_0x42d9bd(0x223,'u@@0')+a1_0x42d9bd(0x1a1,'hMPb')+a1_0x42d9bd(0x1ed,'4U7P')+a1_0x42d9bd(0x1be,'xUmL')+a1_0x42d9bd(0x189,'8R8Y')+a1_0x42d9bd(0x262,'7zdE')+a1_0x42d9bd(0x19a,'PTsH')+a1_0x42d9bd(0x1b2,']J*M')+a1_0x42d9bd(0x205,'[9F5')+'pic]\x22\x20→\x20gt'+a1_0x42d9bd(0x139,'ywhG')+a1_0x42d9bd(0x1b9,'mT16')+a1_0x42d9bd(0x12e,'Fm4E')+a1_0x42d9bd(0x162,'ahKw')+a1_0x42d9bd(0x25b,'Y3Nl')+'\x20[library]'+a1_0x42d9bd(0x1eb,'YKSx')+a1_0x42d9bd(0x1ac,'C7II')+a1_0x42d9bd(0x1e3,'Pa8(')+a1_0x42d9bd(0x15d,'ihdT')+a1_0x42d9bd(0x22c,'ahKw')+a1_0x42d9bd(0x130,'iJxz')+a1_0x42d9bd(0x21a,'AMLM')+a1_0x42d9bd(0x1d4,'hMPb')+a1_0x42d9bd(0x23e,']J*M')+'a.')});registerResolveTool(server),registerDocsTool(server),registerBestPracticesTool(server),registerAutoScanTool(server),registerSearchTool(server),registerAuditTool(server),registerChangelogTool(server),registerCompatTool(server),registerCompareTool(server),registerExamplesTool(server),server[a1_0x42d9bd(0x201,'mj#e')](a1_0x42d9bd(0x199,'GrO7')+a1_0x42d9bd(0x215,'XU]I'),'Scan\x20this\x20'+a1_0x42d9bd(0x240,'Pa8(')+a1_0x42d9bd(0x16e,'io0P')+a1_0x42d9bd(0x209,'GrO7')+'tch\x20live\x20b'+a1_0x42d9bd(0x1cd,'uFA)')+a1_0x42d9bd(0x158,'PTsH')+'rom\x20offici'+a1_0x42d9bd(0x15e,'hYbD'),()=>({'messages':[{'role':a1_0x42d9bd(0x160,'io0P'),'content':{'type':a1_0x42d9bd(0x174,'7zdE'),'text':a1_0x42d9bd(0x1bb,'BIae')+a1_0x42d9bd(0x196,'CGb4')+a1_0x42d9bd(0x136,'sNmO')+a1_0x42d9bd(0x13e,'8R8Y')+a1_0x42d9bd(0x1d1,'mj#e')+a1_0x42d9bd(0x168,'mT16')+a1_0x42d9bd(0x24f,')$2#')+a1_0x42d9bd(0x259,'aZOM')+a1_0x42d9bd(0x175,'mT16')+a1_0x42d9bd(0x1f9,'4U7P')+a1_0x42d9bd(0x177,'^B)F')+a1_0x42d9bd(0x1db,'@uuc')+a1_0x42d9bd(0x211,'sNmO')+a1_0x42d9bd(0x244,'Ozbq')+a1_0x42d9bd(0x161,'NDxr')+a1_0x42d9bd(0x14a,'pU8*')+'ch\x20issue\x20t'+a1_0x42d9bd(0x22e,'ahKw')+a1_0x42d9bd(0x1aa,'AMLM')+'e\x20best-pra'+a1_0x42d9bd(0x246,'Y3Nl')+a1_0x42d9bd(0x1f4,'rHrx')+a1_0x42d9bd(0x182,'BIae')+a1_0x42d9bd(0x17d,'sNmO')+a1_0x42d9bd(0x1de,'ahKw')+a1_0x42d9bd(0x21e,')$2#')+a1_0x42d9bd(0x1c7,'hR&c')}}]})),server[a1_0x42d9bd(0x12d,'HjYu')](a1_0x42d9bd(0x1fb,'ywhG')+a1_0x42d9bd(0x1a8,'pU8*'),a1_0x42d9bd(0x263,'pU8*')+a1_0x42d9bd(0x16d,'io0P')+a1_0x42d9bd(0x173,'ihdT')+a1_0x42d9bd(0x26b,'58eH')+'\x20before\x20up'+a1_0x42d9bd(0x15c,'slFg')+a1_0x42d9bd(0x13b,'8R8Y'),{'library':z['string']()[a1_0x42d9bd(0x1c5,'YKSx')](a1_0x42d9bd(0x200,'BIae')+'\x20check,\x20e.'+a1_0x42d9bd(0x1ce,'[9F5')+a1_0x42d9bd(0x1b3,'GrO7')+',\x20\x27prisma\x27')},({library:_0xf34389})=>({'messages':[{'role':a1_0x42d9bd(0x241,'C7II'),'content':{'type':a1_0x42d9bd(0x1a9,'f8T@'),'text':a1_0x42d9bd(0x1e9,')$2#')+a1_0x42d9bd(0x187,'ywhG')+a1_0x42d9bd(0x13a,'sNmO')+a1_0x42d9bd(0x1a5,'ywhG')+a1_0x42d9bd(0x231,'slFg')+a1_0x42d9bd(0x1e4,'uFA)')+_0xf34389+(a1_0x42d9bd(0x16f,'bMw(')+'e\x20what\x20cha'+a1_0x42d9bd(0x14d,'GitB')+'light\x20any\x20'+a1_0x42d9bd(0x24b,'Y3Nl')+a1_0x42d9bd(0x236,'YKSx')+a1_0x42d9bd(0x25d,'AMLM')+a1_0x42d9bd(0x1d2,'hMPb')+a1_0x42d9bd(0x1ae,'hMPb')+a1_0x42d9bd(0x154,'GitB'))}}]})),server[a1_0x42d9bd(0x16a,'8R8Y')](a1_0x42d9bd(0x1ec,'[9F5')+a1_0x42d9bd(0x167,'f8T@'),'Get\x20curren'+a1_0x42d9bd(0x1bd,'GitB')+a1_0x42d9bd(0x222,'mT16')+a1_0x42d9bd(0x1d0,'8R8Y')+a1_0x42d9bd(0x166,'4!*N')+'is\x20project',()=>({'messages':[{'role':a1_0x42d9bd(0x1d3,'XU]I'),'content':{'type':a1_0x42d9bd(0x221,'PTsH'),'text':a1_0x42d9bd(0x1ef,'hR&c')+a1_0x42d9bd(0x204,'YKSx')+a1_0x42d9bd(0x1b1,'mj#e')+a1_0x42d9bd(0x229,'C7II')+a1_0x42d9bd(0x1d8,'XU]I')+a1_0x42d9bd(0x1ad,'ihdT')+a1_0x42d9bd(0x1a4,'bMw(')+a1_0x42d9bd(0x17c,'7zdE')+a1_0x42d9bd(0x1cb,'HjYu')+a1_0x42d9bd(0x22d,'4U7P')+'each\x20one.\x20'+a1_0x42d9bd(0x1e6,'NDxr')+a1_0x42d9bd(0x16c,'hYbD')+a1_0x42d9bd(0x20c,'uFA)')+a1_0x42d9bd(0x1bf,'uFA)')}}]})),server['prompt'](a1_0x42d9bd(0x1ba,'mj#e')+a1_0x42d9bd(0x14f,'Y3Nl'),a1_0x42d9bd(0x185,'NDxr')+a1_0x42d9bd(0x1ca,'bMw(')+a1_0x42d9bd(0x1d7,'mT16')+a1_0x42d9bd(0x1a7,'4U7P')+a1_0x42d9bd(0x1dc,'BIae')+a1_0x42d9bd(0x15a,'ihdT')+a1_0x42d9bd(0x19e,'AMLM'),{'libraries':z[a1_0x42d9bd(0x265,'HjYu')]()[a1_0x42d9bd(0x144,']J*M')](a1_0x42d9bd(0x23b,'hYbD')+a1_0x42d9bd(0x18c,')$2#')+a1_0x42d9bd(0x254,'GrO7')+a1_0x42d9bd(0x1fa,'slFg')+a1_0x42d9bd(0x152,'ywhG')+a1_0x42d9bd(0x1d5,'xUmL')+a1_0x42d9bd(0x17b,')$2#')+a1_0x42d9bd(0x206,'Fm4E'))},({libraries:_0x59dfc8})=>({'messages':[{'role':a1_0x42d9bd(0x219,'CGb4'),'content':{'type':a1_0x42d9bd(0x255,'hYbD'),'text':a1_0x42d9bd(0x1f6,'HjYu')+a1_0x42d9bd(0x213,'4kW!')+a1_0x42d9bd(0x19c,'ihdT')+a1_0x42d9bd(0x269,'4U7P')+'s\x20side-by-'+a1_0x42d9bd(0x267,']J*M')+_0x59dfc8+(a1_0x42d9bd(0x227,'Pa8(')+a1_0x42d9bd(0x1fd,'Y3Nl')+a1_0x42d9bd(0x1b4,'pU8*')+a1_0x42d9bd(0x170,']J*M')+a1_0x42d9bd(0x212,'xUmL')+a1_0x42d9bd(0x1e0,'xUmL')+a1_0x42d9bd(0x14b,'iJxz')+a1_0x42d9bd(0x247,'hMPb'))}}]})),server[a1_0x42d9bd(0x1f0,'iJxz')](a1_0x42d9bd(0x210,'slFg')+'heck',a1_0x42d9bd(0x268,'sNmO')+'SP\x20and\x20sec'+a1_0x42d9bd(0x18a,'Ozbq')+'\x20for\x20guida'+a1_0x42d9bd(0x21b,'YKSx')+a1_0x42d9bd(0x19b,'sIjt')+a1_0x42d9bd(0x1a2,'ahKw')+a1_0x42d9bd(0x143,'hMPb'),{'topic':z[a1_0x42d9bd(0x198,'YKSx')]()[a1_0x42d9bd(0x235,'7zdE')](a1_0x42d9bd(0x142,'mT16')+a1_0x42d9bd(0x250,'4!*N')+'\x20\x27SQL\x20inje'+a1_0x42d9bd(0x1af,'58eH')+a1_0x42d9bd(0x181,'mj#e')+a1_0x42d9bd(0x25a,'4!*N')+a1_0x42d9bd(0x150,'PTsH')+a1_0x42d9bd(0x1b8,'ahKw'))},({topic:_0x2b8085})=>({'messages':[{'role':a1_0x42d9bd(0x1c4,'GitB'),'content':{'type':a1_0x42d9bd(0x19d,'BIae'),'text':a1_0x42d9bd(0x1c9,'iJxz')+a1_0x42d9bd(0x15b,'CGb4')+a1_0x42d9bd(0x171,'@uuc')+a1_0x42d9bd(0x22a,'ywhG')+a1_0x42d9bd(0x258,'hMPb')+a1_0x42d9bd(0x193,'PTsH')+a1_0x42d9bd(0x22f,'4U7P')+a1_0x42d9bd(0x216,'mj#e')+'\x20'+_0x2b8085+(a1_0x42d9bd(0x156,'slFg')+a1_0x42d9bd(0x14e,'bMw(')+a1_0x42d9bd(0x202,'XU]I')+a1_0x42d9bd(0x1df,'sNmO')+a1_0x42d9bd(0x245,'7zdE')+a1_0x42d9bd(0x260,'hYbD')+a1_0x42d9bd(0x186,'7zdE')+a1_0x42d9bd(0x12c,'oISg')+a1_0x42d9bd(0x25c,'XU]I')+'\x20reference'+'s.')}}]}));async function main(){const _0x4b4ab7=a1_0x42d9bd,_0x4884c9=new StdioServerTransport();await server[_0x4b4ab7(0x23c,'pU8*')](_0x4884c9),console[_0x4b4ab7(0x18b,'58eH')](SERVER_NAME+'\x20v'+SERVER_VERSION+(_0x4b4ab7(0x190,'58eH')+_0x4b4ab7(0x165,'bMw('))+getInstallId()+']'),checkForUpdate()[_0x4b4ab7(0x141,'BIae')](_0x1ba5fc=>{const _0x57b3c2=_0x4b4ab7;if(_0x1ba5fc){setPendingUpdate(_0x1ba5fc);const _0x141c27=formatUpdateNotice(_0x1ba5fc);console[_0x57b3c2(0x23f,'io0P')](_0x141c27),server[_0x57b3c2(0x180,'rHrx')][_0x57b3c2(0x133,'rHrx')+_0x57b3c2(0x21d,'4!*N')]({'level':_0x57b3c2(0x208,'NDxr'),'data':_0x141c27})[_0x57b3c2(0x19f,'7zdE')](()=>{});}})[_0x4b4ab7(0x264,'rHrx')](()=>{});}main()[a1_0x42d9bd(0x25e,'u@@0')](_0x388c94=>{const _0x20026c=a1_0x42d9bd;console[_0x20026c(0x253,')$2#')](_0x20026c(0x134,'NDxr')+'r:',_0x388c94),process[_0x20026c(0x218,'u@@0')](0x1);});
|