{"_id":"@dragoscirjan/mcp-searchable","_rev":"2-f12d236282d76242f32ccf7bcadf2170","name":"@dragoscirjan/mcp-searchable","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.3":{"name":"@dragoscirjan/mcp-searchable","version":"1.0.3","keywords":["bootstrap","browser","eslint","esm","import-maps","node","prettier","template","typescript","vitest"],"author":{"name":"Dragos Cirjan"},"license":"MIT","_id":"@dragoscirjan/mcp-searchable@1.0.3","maintainers":[{"name":"dragoscirjannpm","email":"dragos.cirjan@gmail.com"}],"homepage":"https://github.com/dragoscirjan/mcp-searchable#readme","bugs":{"url":"https://github.com/dragoscirjan/mcp-searchable/issues"},"bin":{"mcp-searchable":"dist/index.js"},"dist":{"shasum":"423ea71576b4c46fc05a1c6b22d74704bbbc6edd","tarball":"https://registry.npmjs.org/@dragoscirjan/mcp-searchable/-/mcp-searchable-1.0.3.tgz","fileCount":25,"integrity":"sha512-Tl0E4/lLR1L+d0w6nHYOt/5MVA+LyBfvN5tKEhjEsTmU+gFFTb7s32lznzAMXWGvhaXaVOOk3/aPUJ8/Zprpdw==","signatures":[{"sig":"MEUCICBIlX/a/I7JSEgFqRlaP3NZi2cxsrHOnbINOwWSlaBQAiEA2R96MvzFjMIBA4HwPyOI95FmuQ4aGSCV8bRtVlz77uk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72663},"main":"./dist/index.js","type":"module","_from":"file:release-assets/dragoscirjan-mcp-searchable-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"npm":">=10.0.0","node":">=20.0.0"},"exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"docs":"uv run mkdocs build --strict","lint":"eslint --fix .","test":"vitest run","build":"run-s clean build:esm","clean":"rimraf .nyc_output coverage dist site","start":"node dist/index.js","format":"prettier --write .","pretest":"run-s clean build","prebuild":"run-s clean","validate":"run-s format lint duplicate-check test","build:esm":"tsc -p tsconfig.json","postbuild":"chmod +x dist/index.js","typecheck":"tsc --noEmit","lint:check":"eslint .","test:watch":"vitest","start:debug":"node --inspect-brk dist/index.js","format:check":"prettier --check .","license-check":"licensee --errors-only","test:coverage":"vitest run --coverage","duplicate-check":"jscpd src/"},"_npmUser":{"name":"dragoscirjannpm","email":"dragos.cirjan@gmail.com"},"_resolved":"/home/runner/work/mcp-searchable/mcp-searchable/release-assets/dragoscirjan-mcp-searchable-1.0.3.tgz","_integrity":"sha512-Tl0E4/lLR1L+d0w6nHYOt/5MVA+LyBfvN5tKEhjEsTmU+gFFTb7s32lznzAMXWGvhaXaVOOk3/aPUJ8/Zprpdw==","repository":{"url":"git+https://github.com/dragoscirjan/mcp-searchable.git","type":"git"},"_npmVersion":"10.9.7","description":"Smart Web Extraction MCP Server","directories":{},"sideEffects":false,"_nodeVersion":"22.22.2","dependencies":{"axios":"^1.16.1","jsdom":"^29.1.1","turndown":"^7.2.4","better-sqlite3":"^12.10.0","@mozilla/readability":"^0.6.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.0","husky":"^9.1.7","jscpd":"^4.2.2","rimraf":"^6.1.3","esbuild":"^0.28.0","typedoc":"0.28.19","licensee":"^12.0.1","typescript":"^6.0.3","@types/node":"^25.8.0","lint-staged":"^17.0.5","@types/axios":"^0.14.4","@types/jsdom":"^28.0.3","npm-run-all2":"^8.0.4","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.6","@jscpd/badge-reporter":"^4.2.2","@templ-project/eslint":"^1.3.0","@templ-project/vitest":"^0.3.2","@types/better-sqlite3":"^7.6.13","@templ-project/prettier":"^1.1.0","typedoc-plugin-markdown":"4.11.0","@types/mozilla-readability":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-searchable_1.0.3_1778974616349_0.883192968634352","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"author":{"name":"Dragos Cirjan"},"bin":{"mcp-searchable":"dist/index.js"},"bugs":{"url":"https://github.com/dragoscirjan/mcp-searchable/issues"},"description":"Smart Web Extraction MCP Server","devDependencies":{"@jscpd/badge-reporter":"^4.2.2","@templ-project/eslint":"^1.3.0","@templ-project/prettier":"^1.1.0","@templ-project/vitest":"^0.3.2","@types/axios":"^0.14.4","@types/better-sqlite3":"^7.6.13","@types/jsdom":"^28.0.3","@types/mozilla-readability":"^0.2.1","@types/node":"^25.8.0","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.6","esbuild":"^0.28.0","husky":"^9.1.7","jscpd":"^4.2.2","licensee":"^12.0.1","lint-staged":"^17.0.5","npm-run-all2":"^8.0.4","rimraf":"^6.1.3","tsx":"^4.22.0","typedoc":"0.28.19","typedoc-plugin-markdown":"4.11.0","typescript":"^6.0.3"},"engines":{"node":">=20.0.0","npm":">=10.0.0"},"exports":{".":{"import":"./dist/index.js","default":"./dist/index.js"}},"homepage":"https://github.com/dragoscirjan/mcp-searchable#readme","keywords":["bootstrap","browser","eslint","esm","import-maps","node","prettier","template","typescript","vitest"],"license":"MIT","main":"./dist/index.js","module":"./dist/index.js","name":"@dragoscirjan/mcp-searchable","repository":{"type":"git","url":"git+https://github.com/dragoscirjan/mcp-searchable.git"},"scripts":{"build":"run-s clean build:esm","build:esm":"tsc -p tsconfig.json","clean":"rimraf .nyc_output coverage dist site","docs":"uv run mkdocs build --strict","duplicate-check":"jscpd src/","format":"prettier --write .","format:check":"prettier --check .","license-check":"licensee --errors-only","lint":"eslint --fix .","lint:check":"eslint .","prebuild":"run-s clean","pretest":"run-s clean build","start":"node dist/index.js","start:debug":"node --inspect-brk dist/index.js","test":"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest","typecheck":"tsc --noEmit","validate":"run-s format lint duplicate-check test","postbuild":"chmod +x dist/index.js"},"sideEffects":false,"type":"module","version":"1.0.4","dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","@mozilla/readability":"^0.6.0","axios":"^1.16.1","better-sqlite3":"^12.10.0","jsdom":"^29.1.1","turndown":"^7.2.4"},"_id":"@dragoscirjan/mcp-searchable@1.0.4","types":"./dist/index.d.ts","_integrity":"sha512-fcDAOasthdzfx3WrlCAxWNq1RhYixAyd/ykXo3joMcc1yfVYFXVlTas2PguuZO9p3CEB8ED5whq3KQ0UwDIj2g==","_resolved":"/home/runner/work/mcp-searchable/mcp-searchable/release-assets/dragoscirjan-mcp-searchable-1.0.4.tgz","_from":"file:release-assets/dragoscirjan-mcp-searchable-1.0.4.tgz","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-fcDAOasthdzfx3WrlCAxWNq1RhYixAyd/ykXo3joMcc1yfVYFXVlTas2PguuZO9p3CEB8ED5whq3KQ0UwDIj2g==","shasum":"fcabe6296538204733e0cc1872a8ff08ba580a11","tarball":"https://registry.npmjs.org/@dragoscirjan/mcp-searchable/-/mcp-searchable-1.0.4.tgz","fileCount":25,"unpackedSize":72663,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCtzXEe+N4BQJJISO9OJzHZy12oShgGtZlmUcPcABiQzAIgW4es+Htg4L0Gny5YIs6s+PLbC/0H7PPiB8PyrRFdGLU="}]},"_npmUser":{"name":"dragoscirjannpm","email":"dragos.cirjan@gmail.com"},"directories":{},"maintainers":[{"name":"dragoscirjannpm","email":"dragos.cirjan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-searchable_1.0.4_1778975731813_0.5877901078999805"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-16T23:36:56.163Z","modified":"2026-05-16T23:55:32.106Z","1.0.3":"2026-05-16T23:36:56.480Z","1.0.4":"2026-05-16T23:55:32.000Z"},"bugs":{"url":"https://github.com/dragoscirjan/mcp-searchable/issues"},"author":{"name":"Dragos Cirjan"},"license":"MIT","homepage":"https://github.com/dragoscirjan/mcp-searchable#readme","keywords":["bootstrap","browser","eslint","esm","import-maps","node","prettier","template","typescript","vitest"],"repository":{"type":"git","url":"git+https://github.com/dragoscirjan/mcp-searchable.git"},"description":"Smart Web Extraction MCP Server","maintainers":[{"name":"dragoscirjannpm","email":"dragos.cirjan@gmail.com"}],"readme":"# TypeScript Bootstrap Template\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js CI](https://github.com/dragoscirjan/mcp-searchable/actions/workflows/ci.yml/badge.svg)](https://github.com/dragoscirjan/mcp-searchable/actions/workflows/ci.yml)\n[![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/dragoscirjan/mcp-searchable/issues)\n\n> A modern TypeScript project template with ESM, testing, linting, and quality tools built-in.\n\n- [TypeScript Bootstrap Template](#typescript-bootstrap-template)\n  - [Quick Start](#quick-start)\n    - [Bootstrap Options](#bootstrap-options)\n  - [What's Included](#whats-included)\n  - [Common Commands](#common-commands)\n    - [Using npm](#using-npm)\n    - [Using mise tasks (Recommended)](#using-taskfile-recommended)\n  - [Requirements](#requirements)\n  - [Setup Development Environment](#setup-development-environment)\n  - [Project Structure](#project-structure)\n  - [Building](#building)\n  - [Testing](#testing)\n  - [Code Quality](#code-quality)\n    - [Pre-commit Hooks](#pre-commit-hooks)\n  - [Configuration](#configuration)\n  - [Using as a Library](#using-as-a-library)\n  - [CI/CD Pipeline](#cicd-pipeline)\n  - [License](#license)\n  - [Support](#support)\n\n## Quick Start\n\n**Bootstrap a new project:**\n\n```bash\nnpx --yes --package=github:dragoscirjan/mcp-searchable bootstrap ./my-project\ncd my-project\nnpm install\nnpm test\n```\n\nThat's it! You now have a fully configured TypeScript project.\n\n## MCP Search Providers\n\nThe `web_search` MCP tool supports multiple providers via the optional `provider` argument:\n\n- `duckduckgo` (default)\n- `google` (Google Custom Search JSON API)\n- `bing` (Bing Web Search API)\n- `brave` (Brave Search API)\n\n### Tool input\n\n```json\n{\n  \"query\": \"model context protocol\",\n  \"provider\": \"google\",\n  \"limit\": 5\n}\n```\n\n### Required environment variables\n\n- `GOOGLE_API_KEY` and `GOOGLE_CSE_ID` for `provider=google`\n- `BING_API_KEY` for `provider=bing`\n- `BRAVE_API_KEY` for `provider=brave`\n\nOptional:\n\n- `BING_API_ENDPOINT` (override default Bing endpoint)\n\nYou can copy `.env.example` and fill in your provider keys.\n\n### Bootstrap Options\n\n```bash\n# Bootstrap with only ESM and CJS builds (no browser builds)\nnpx --yes --package=github:dragoscirjan/mcp-searchable bootstrap --target esm,cjs ./my-project\n\n# Bootstrap as part of a monorepo (removes .husky, .github)\nnpx --yes --package=github:dragoscirjan/mcp-searchable bootstrap --part-of-monorepo ./packages/my-lib\n\n# Show all available options\nnpx --yes --package=github:dragoscirjan/mcp-searchable bootstrap --help\n```\n\nSee [.npx-install/README.md](.npx-install/README.md) for detailed bootstrap documentation.\n\n## What's Included\n\n| Feature                 | Tool                                                                                                    | Description                        |\n| ----------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------- |\n| **Language**            | [TypeScript 5.9](https://www.typescriptlang.org/)                                                       | Type-safe JavaScript               |\n| **Runtime**             | [Node.js 22+](https://nodejs.org/)                                                                      | Modern JavaScript runtime          |\n| **Execution**           | [tsx](https://github.com/privatenumber/tsx)                                                             | TypeScript execution without build |\n| **Module System**       | ESM                                                                                                     | Native ES Modules                  |\n| **Build System**        | [tsc](https://www.typescriptlang.org/) + [esbuild](https://esbuild.github.io/)                          | Type-check + fast bundling         |\n| **Test Framework**      | [Vitest](https://vitest.dev/)                                                                           | Fast unit testing with V8 coverage |\n| **Linting**             | [ESLint](https://eslint.org/)                                                                           | Code quality with TypeScript rules |\n| **Formatting**          | [Prettier](https://prettier.io/)                                                                        | Consistent code formatting         |\n| **Documentation**       | [MkDocs](https://www.mkdocs.org/) + [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) | Project documentation site         |\n| **Task Runner**         | [mise tasks](https://mise.jdx.dev/tasks/)                                                               | Modern build automation            |\n| **Tool Management**     | [mise](https://mise.jdx.dev/)                                                                           | Isolated development environment   |\n| **Pre-commit Hooks**    | [Husky](https://typicode.github.io/husky/) + [lint-staged](https://github.com/okonet/lint-staged)       | Automatic validation               |\n| **Duplicate Detection** | [jscpd](https://github.com/kucherenko/jscpd)                                                            | Copy-paste detector                |\n| **CI/CD**               | GitHub Actions                                                                                          | Multi-platform testing & releases  |\n\n## Common Commands\n\n### Using npm\n\n```bash\nnpm start              # Run the app (via tsx)\nnpm test               # Run tests\nnpm run test:coverage  # Run tests with coverage\nnpm run lint           # Lint and auto-fix\nnpm run format         # Format code with Prettier\nnpm run build          # Build for production\nnpm run docs           # Build MkDocs site (strict)\nnpm run validate       # Run all quality checks\n```\n\n### Using mise tasks (Recommended)\n\n```bash\n# === Development ===\nmise run run              # Run the application (via node)\nmise run format            # Format all code (Prettier)\nmise run format:check      # Check formatting without fixing\nmise run lint              # Lint all code (ESLint + TypeScript)\nmise run lint:check        # Check all without fixing\nmise run duplicate-check   # Check for duplicate code\nmise run docs              # Build MkDocs site (strict)\nmise run docs:serve        # Serve documentation locally\nmise run deps:sync         # Install all dependencies (mise, npm)\nmise run deps:refresh      # Update all dependencies\nmise run deps:clean        # Remove all dependencies\n```\n\n## Requirements\n\n- [mise](https://mise.jdx.dev/) - Tool version management (installs everything else)\n\n**Automatically installed via mise:**\n\n- Node.js 22+\n- Python 3.11+ (for helper scripts)\n- ShellCheck (shell script linting)\n- PowerShell Core (cross-platform PowerShell)\n\n## Setup Development Environment\n\n```bash\n# Install mise (if not already installed)\n# Linux/macOS:\ncurl https://mise.run | sh\n\n# Windows (PowerShell):\nwinget install jdx.mise\n# or: choco install mise\n\n# Install project tools and node modules\n\n\n# Clone and setup\ngit clone https://github.com/dragoscirjan/mcp-searchable.git my-project\ncd my-project\n\n# Install all dependencies\nmise run deps:sync\n\n# Verify setup\nmise run validate\n```\n\n## Project Structure\n\n```text\n├── .github/\n│   └── workflows/        # CI/CD pipelines\n├── .husky/               # Git hooks\n├── .scripts/             # Build/lint helper scripts\n\n├── src/\n│   ├── index.ts          # Main entry point\n│   └── lib/\n│       ├── greeter.ts    # Example module with TypeScript types\n│       └── greeter.spec.ts # Unit tests (co-located)\n├── dist/                 # Build output (gitignored)\n├── docs/                 # MkDocs source pages\n├── mise.toml             # Configuration and tasks\n├── .mise.toml            # Tool versions & hooks\n├── package.json          # Node.js dependencies\n├── tsconfig.json         # TypeScript configuration\n├── vitest.config.ts      # Test configuration\n├── eslint.config.mjs     # ESLint configuration\n├── prettier.config.mjs   # Prettier configuration\n└── mkdocs.yml            # MkDocs configuration\n```\n\n## Building\n\nThe template uses a two-step build process:\n\n1. **tsc** - Type-checks and emits declaration files (`.d.ts`)\n2. **esbuild** - Bundles for multiple targets\n\n```bash\nnpm run build\n# or: npm run build\n```\n\nOutputs:\n\n- `dist/index.js` - Node.js ESM build artifact\n- `dist/index.d.ts` - TypeScript declaration file\n\n## Testing\n\nTests are co-located with source files using the `.spec.ts` suffix:\n\n```typescript\n// src/lib/greeter.spec.ts\nimport { describe, it, expect } from \"vitest\";\nimport { hello } from \"./greeter\";\n\ndescribe(\"hello\", () => {\n  it(\"returns greeting\", () => {\n    expect(hello(\"World\")).toBe(\"Hello, World!\");\n  });\n});\n```\n\nRun tests:\n\n```bash\nnpm run test                # Run all tests\nnpm run test:coverage       # Run with coverage report\n```\n\n## Code Quality\n\n### Pre-commit Hooks\n\nEvery commit is validated with:\n\n- Code formatting (Prettier)\n- Linting (ESLint)\n- Type checking (TypeScript)\n- Unit tests (Vitest)\n\nCI runs additional checks:\n\n- Test coverage\n- Duplicate code detection\n- License compliance\n\nConfigure hooks in:\n\n- `.husky/pre-commit` - Hook script\n- `.lintstagedrc.yml` - File patterns and commands\n\n## Configuration\n\nAll configuration uses shared packages for consistency:\n\n| File                  | Purpose                                               |\n| --------------------- | ----------------------------------------------------- |\n| `.mise.toml`          | Tool versions (Node, Python, ShellCheck)              |\n| `mise.toml`           | Configuration and tasks                               |\n| `tsconfig.json`       | TypeScript config (extends `@templ-project/tsconfig`) |\n| `eslint.config.mjs`   | ESLint config (uses `@templ-project/eslint`)          |\n| `prettier.config.mjs` | Prettier config (uses `@templ-project/prettier`)      |\n| `vitest.config.ts`    | Vitest test configuration                             |\n| `mkdocs.yml`          | MkDocs site navigation and theme settings             |\n| `.jscpd.json`         | Duplicate detection settings                          |\n| `.licensee.json`      | License compliance settings                           |\n\n## Using as a Library\n\n```typescript\n// ES Modules (recommended)\nimport { hello, Greeter } from \"@dragoscirjan/mcp-searchable-template\";\n\nconst greeting = hello(\"World\");\nconsole.log(greeting); // \"Hello, World!\"\n```\n\n```javascript\n// ESM from built output\nimport { hello } from \"./dist/index.js\";\n```\n\n## CI/CD Pipeline\n\nThe GitHub Actions pipeline runs on **Linux, macOS, and Windows**:\n\n| Workflow         | Trigger                 | Jobs                               |\n| ---------------- | ----------------------- | ---------------------------------- |\n| `ci.yml`         | Push/PR to main/develop | Matrix orchestrator                |\n| `ci.quality.yml` | Called by ci.yml        | lint, test, build, duplicate-check |\n| `ci.version.yml` | Push to main            | Semantic version bump              |\n| `ci.release.yml` | After version bump      | Create GitHub release              |\n\n## License\n\nMIT © [Dragos Cirjan](https://github.com/dragoscirjan)\n\n## Support\n\n- [Report Issues](https://github.com/dragoscirjan/mcp-searchable/issues)\n- [Read the Docs](https://github.com/dragoscirjan/mcp-searchable#readme)\n- [Star on GitHub](https://github.com/dragoscirjan/mcp-searchable)\n","readmeFilename":"README.md"}