{"_id":"@andev2005/mcp-extension-lib","_rev":"2-138f615914a3423c12a5dacf444710b5","name":"@andev2005/mcp-extension-lib","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@andev2005/mcp-extension-lib","version":"0.1.0","keywords":["mcp","chrome-extension","protocol","tools"],"author":"","license":"MIT","_id":"@andev2005/mcp-extension-lib@0.1.0","maintainers":[{"name":"andev2005","email":"thaianthedev@gmail.com"}],"dist":{"shasum":"c9b5865fb5dbc63b749f28c709684986100dbb52","tarball":"https://registry.npmjs.org/@andev2005/mcp-extension-lib/-/mcp-extension-lib-0.1.0.tgz","fileCount":17,"integrity":"sha512-k0i1w9Qsu+Jx/GjRSHFwGlQrQegmVQWtUkPO7OLB1Thy+0EYWklh01I51gMrgMIMjXyCDBPJ01PfdJbHJrpInw==","signatures":[{"sig":"MEQCIDfLybiPoOAzI5BYDqODNZen7pU4bBkqdjTFljPGOy/gAiBdq8XFni41T7+VkJJNQ+VqHGwuAL//nYcV7IDiyOktow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250543},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./chrome":{"types":"./dist/chrome/index.d.ts","import":"./dist/chrome/index.mjs","require":"./dist/chrome/index.js"}},"gitHead":"867a0ab3c8f6ea1deace22cd9ab6d1be52ea17a2","scripts":{"dev":"tsup --watch","test":"echo \"Error: no test specified\" && exit 1","build":"tsup","prepublishOnly":"npm run build"},"_npmUser":{"name":"andev2005","email":"thaianthedev@gmail.com"},"_npmVersion":"10.8.2","description":"MCP (Model Context Protocol) library for Chrome Extensions","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/chrome":"^0.0.254"},"_npmOperationalInternal":{"tmp":"tmp/mcp-extension-lib_0.1.0_1768384841625_0.690951556398391","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-14T10:00:41.455Z","modified":"2026-02-25T15:07:20.058Z","0.1.0":"2026-01-14T10:00:41.780Z"},"license":"MIT","keywords":["mcp","chrome-extension","protocol","tools"],"description":"MCP (Model Context Protocol) library for Chrome Extensions","maintainers":[{"email":"thaianthedev@gmail.com","name":"thaianthedev"}],"readme":"# MCP Extension Library\n\n[![npm version](https://img.shields.io/npm/v/@your-scope/mcp-extension-lib.svg)](https://npmjs.org/package/@your-scope/mcp-extension-lib)\n\nA TypeScript library for building **MCP (Model Context Protocol) servers** in Chrome Extensions. This library allows extensions to expose browser control capabilities through a standardized protocol that AI coding agents can use.\n\n## Features\n\n- 🎯 **Built-in Tool Packs** - Pre-built tools for navigation, DOM interaction, and debugging\n- 🔌 **Chrome-specific adapters** - Ready-to-use helpers for extension APIs  \n- 🚀 **Easy integration** - Import tool packs and start serving\n- 📦 **Type-safe** - Full TypeScript support with detailed descriptions\n- 🔄 **Flexible** - Use all tools or cherry-pick specific packs\n\n## Installation\n\n```bash\nnpm install @your-scope/mcp-extension-lib\n```\n\n## Quick Start\n\n### 1. Use Built-in Tool Packs\n\nIn your extension's `background/sw.ts`:\n\n```typescript\nimport {createRouter} from '@your-scope/mcp-extension-lib';\nimport {createMcpExtensionServer} from '@your-scope/mcp-extension-lib/chrome';\nimport {toolPacks, mergeToolPacks} from '@your-scope/mcp-extension-lib/chrome';\n\n// Option 1: Use all available tools\n// import {allTools} from '@your-scope/mcp-extension-lib/chrome';\n// const router = createRouter({\n//   toolDefs: allTools.definitions,\n//   handlers: allTools.handlers,\n// });\n\n// Option 2: Select specific tool packs\nconst tools = mergeToolPacks([\n  toolPacks.navigation,  // navigate, new_page, close_page, list_pages, reload_page\n  toolPacks.dom,         // dom.click, dom.fill, dom.getText, dom.waitForSelector\n  toolPacks.debugging,   // screenshot, evaluate_script\n]);\n\nconst router = createRouter({\n  toolDefs: tools.definitions,\n  handlers: tools.handlers,\n});\n\n// Start MCP server\nconst server = createMcpExtensionServer({\n  router,\n  transport: {type: 'runtimePort'},\n});\n\nserver.listen();\n```\n\n### 2. Update manifest.json\n\n```json\n{\n  \"manifest_version\": 3,\n  \"name\": \"Your Extension\",\n  \"version\": \"1.0.0\",\n  \"permissions\": [\"activeTab\", \"scripting\", \"tabs\"],\n  \"background\": {\n    \"service_worker\": \"background/sw.js\",\n    \"type\": \"module\"\n  },\n  \"host_permissions\": [\"<all_urls>\"]\n}\n```\n\n## Available Tool Packs\n\n### Navigation Tools (`toolPacks.navigation`)\n\n| Tool | Description |\n|------|-------------|\n| `navigate` | Navigate the current tab to a URL |\n| `new_page` | Create a new tab and navigate to URL |\n| `close_page` | Close a tab by ID |\n| `list_pages` | List all open tabs |\n| `reload_page` | Reload a tab (with optional cache bypass) |\n\n### DOM Tools (`toolPacks.dom`)\n\n| Tool | Description |\n|------|-------------|\n| `dom.click` | Click element by CSS selector |\n| `dom.fill` | Fill input/textarea/select element |\n| `dom.getText` | Get text content of an element |\n| `dom.waitForSelector` | Wait for element to appear in DOM |\n\n### Debugging Tools (`toolPacks.debugging`)\n\n| Tool | Description |\n|------|-------------|\n| `screenshot` | Capture screenshot of visible tab area |\n| `evaluate_script` | Execute JavaScript and return result |\n\n## Custom Tools\n\nYou can also create custom tool packs:\n\n```typescript\nimport type {ToolPack} from '@your-scope/mcp-extension-lib/chrome';\nimport {ok, err} from '@your-scope/mcp-extension-lib';\n\nconst customTools: ToolPack = {\n  definitions: [\n    {\n      name: 'custom.doSomething',\n      description: 'Do something custom',\n      inputSchema: {\n        type: 'object',\n        properties: {\n          param: {type: 'string', description: 'Parameter description'},\n        },\n        required: ['param'],\n      },\n      annotations: {\n        category: 'custom',\n        readOnlyHint: false,\n      },\n    },\n  ],\n  handlers: {\n    async 'custom.doSomething'(params, context) {\n      try {\n        // Implementation\n        return ok('Success!');\n      } catch (error) {\n        return err(error as Error);\n      }\n    },\n  },\n};\n\n// Merge with built-in tools\nconst tools = mergeToolPacks([\n  toolPacks.navigation,\n  customTools,\n]);\n```\n\n## API Reference\n\n### Tool Packs\n\n```typescript\nimport {toolPacks, mergeToolPacks, allTools} from '@your-scope/mcp-extension-lib/chrome';\n\n// Individual packs\ntoolPacks.navigation\ntoolPacks.dom\ntoolPacks.debugging\n\n// Merge multiple packs\nconst tools = mergeToolPacks([...packs]);\n\n// All tools combined\nallTools.definitions\nallTools.handlers\n```\n\n### Chrome Helpers\n\n```typescript\nimport * as tabs from '@your-scope/mcp-extension-lib/chrome';\nimport * as scripting from '@your-scope/mcp-extension-lib/chrome';\nimport * as storage from '@your-scope/mcp-extension-lib/chrome';\n```\n\n## Architecture\n\n```\nsrc/\n├── core/              # Platform-agnostic MCP protocol\n│   ├── protocol.ts    # MCP message types\n│   ├── router.ts      # Request router\n│   └── types.ts       # Type definitions\n└── chrome/            # Chrome extension adapter\n    ├── tools/         # Built-in tool packs\n    │   ├── navigation.ts\n    │   ├── dom.ts\n    │   └── debugging.ts\n    ├── exec/          # Chrome API helpers\n    └── server.ts      # MCP Extension Server\n```\n\n## Examples\n\nSee the [examples/minimal-extension](./examples/minimal-extension) directory for a complete working example.\n\n## TypeScript\n\nThis library is written in TypeScript and provides full type definitions.\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","readmeFilename":"README.md"}