Thank you for your interest in contributing to Chrome MCP Server! This document provides guidelines and information for contributors.
We welcome contributions in many forms:
- π Bug reports and fixes
- β¨ New features and tools
- π Documentation improvements
- π§ͺ Tests and performance optimizations
- π Translations and internationalization
- π‘ Ideas and suggestions
- Node.js 18.19.0+ and pnpm or npm (latest version)
- Chrome/Chromium browser for testing
- Git for version control
- Rust (for WASM development, optional)
- TypeScript knowledge
- Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/chrome-mcp-server.git
cd chrome-mcp-server- Install dependencies
pnpm install- Start the project
npm run dev- Load the extension in Chrome
- Open
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked" and select
your/extension/dist
- Open
chrome-mcp-server/
βββ app/
β βββ chrome-extension/ # Chrome extension (WXT + Vue 3)
β β βββ entrypoints/ # Background scripts, popup, content scripts
β β βββ utils/ # AI models, vector database, utilities
β β βββ workers/ # Web Workers for AI processing
β βββ native-server/ # Native messaging server (Fastify + TypeScript)
β βββ src/mcp/ # MCP protocol implementation
β βββ src/server/ # HTTP server and native messaging
βββ packages/
β βββ shared/ # Shared types and utilities
β βββ wasm-simd/ # SIMD-optimized WebAssembly math functions
βββ docs/ # Documentation
- Define the tool schema in
packages/shared/src/tools.ts:
{
name: 'your_new_tool',
description: 'Description of what your tool does',
inputSchema: {
type: 'object',
properties: {
// Define parameters
},
required: ['param1']
}
}- Implement the tool in
app/chrome-extension/entrypoints/background/tools/browser/:
class YourNewTool extends BaseBrowserToolExecutor {
name = TOOL_NAMES.BROWSER.YOUR_NEW_TOOL;
async execute(args: YourToolParams): Promise<ToolResult> {
// Implementation
}
}-
Export the tool in
app/chrome-extension/entrypoints/background/tools/browser/index.ts -
Add tests in the appropriate test directory
- TypeScript: Use strict TypeScript with proper typing
- ESLint: Follow the configured ESLint rules (
pnpm lint) - Prettier: Format code with Prettier (
pnpm format) - Naming: Use descriptive names and follow existing patterns
- Comments: Add JSDoc comments for public APIs
- Error Handling: Always handle errors gracefully
- Create a feature branch
git checkout -b feature/your-feature-name-
Make your changes
- Follow the code style guidelines
- Add tests for new functionality
- Update documentation if needed
-
Test your changes
- Ensure all existing tests pass
- Test the Chrome extension manually
- Verify MCP protocol compatibility
-
Commit your changes
git add .
git commit -m "feat: add your feature description"We use Conventional Commits:
feat:for new featuresfix:for bug fixesdocs:for documentation changestest:for adding testsrefactor:for code refactoring
- Push and create a Pull Request
git push origin feature/your-feature-nameWhen reporting bugs, please include:
- Environment: OS, Chrome version, Node.js version
- Steps to reproduce: Clear, step-by-step instructions
- Expected behavior: What should happen
- Actual behavior: What actually happens
- Screenshots/logs: If applicable
- MCP client: Which MCP client you're using (Claude Desktop, etc.)
For feature requests, please provide:
- Use case: Why is this feature needed?
- Proposed solution: How should it work?
- Alternatives: Any alternative solutions considered?
- Additional context: Screenshots, examples, etc.
If you're contributing to the WASM SIMD package:
cd packages/wasm-simd
# Install Rust and wasm-pack if not already installed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install wasm-pack
# Build WASM package
pnpm build
# The built files will be copied to app/chrome-extension/workers/- Use Chrome DevTools for debugging extension popup and background scripts
- Check
chrome://extensions/for extension errors - Use
console.logstatements for debugging - Monitor the native messaging connection in the background script
- Use MCP Inspector for protocol debugging
- Test with different MCP clients (Claude Desktop, custom clients)
- Verify tool schemas and responses match MCP specifications
- Model Context Protocol Specification
- Chrome Extension Development
- WXT Framework Documentation
- TypeScript Handbook
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and general discussion
- Pull Requests: For code contributions
By contributing to Chrome MCP Server, you agree that your contributions will be licensed under the MIT License.
If you're contributing to an open source project for the first time:
- Start small: Look for issues labeled "good first issue"
- Read the code: Familiarize yourself with the project structure and coding style
- Ask questions: Ask questions in GitHub Discussions
- Learn the tools: Get familiar with Git, GitHub, TypeScript, and other tools
- Architecture improvements: Propose system-level improvements
- Performance optimization: Identify and fix performance bottlenecks
- New features: Design and implement complex new features
- Mentor newcomers: Help new contributors get started
- API documentation: Improve tool documentation and examples
- Tutorials: Create usage guides and best practices
- Translations: Help translate documentation to other languages
- Video content: Create demo videos and tutorials
- Unit tests: Write tests for new features
- Integration tests: Test interactions between components
- Performance tests: Benchmark testing and performance regression detection
- User testing: Functional testing in real-world scenarios
We value every contribution, no matter how big or small. Contributors will be recognized in the following ways:
- README acknowledgments: Contributors listed in the project README
- Release notes: Contributors thanked in version release notes
- Contributor badges: Contributor badges on GitHub profiles
- Community recognition: Special thanks in community discussions
Thank you for considering contributing to Chrome MCP Server! Your participation makes this project better.