Contributing Guide ๐ค
December 29, 2025 ยท View on GitHub
Thank you for your interest in contributing to Chrome MCP Server! This document provides guidelines and information for contributors.
๐ฏ How to Contribute
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
๐ Getting Started
Prerequisites
- Node.js 20+ and pnpm or npm (latest version)
- Chrome/Chromium browser for testing
- Git for version control
- Rust (for WASM development, optional)
- TypeScript knowledge
Development Setup
- 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
๐๏ธ Project Structure
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
๐ ๏ธ Development Workflow
Adding New Tools
- 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
Code Style Guidelines
- 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
๐ Pull Request Process
- 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-name
๐ Bug Reports
When 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.)
๐ก Feature Requests
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.
๐ง Development Tips
Using WASM SIMD
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/
Debugging Chrome Extension
- 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
Testing MCP Protocol
- Use MCP Inspector for protocol debugging
- Test with different MCP clients (Claude Desktop, custom clients)
- Verify tool schemas and responses match MCP specifications
๐ Resources
- Model Context Protocol Specification
- Chrome Extension Development
- WXT Framework Documentation
- TypeScript Handbook
๐ค Community
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and general discussion
- Pull Requests: For code contributions
๐ License
By contributing to Chrome MCP Server, you agree that your contributions will be licensed under the MIT License.
๐ฏ Contributor Guidelines
New Contributors
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
Experienced Contributors
- 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
Documentation Contributions
- 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
Testing Contributions
- 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
๐ Contributor Recognition
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.