# Contributing to NCP
Thank you for your interest in contributing to the Natural Context Protocol (NCP) project! This document provides guidelines and information for contributors.
## Code of Conduct
This project follows a standard code of conduct. Be respectful, inclusive, and professional in all interactions.
## Development Workflow
### Prerequisites
- Node.js 18+ and npm
- TypeScript knowledge
- Familiarity with Jest testing framework
- Understanding of the Model Context Protocol (MCP)
### Setup
```bash
# Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/ncp.git
cd ncp
# Install dependencies
npm install
# Run tests to ensure everything works
npm test
```
### Test-Driven Development
NCP follows strict TDD principles:
1. **Write tests first** - All new features must have tests written before implementation
2. **Red-Green-Refactor** - Follow the TDD cycle strictly
3. **High coverage** - Maintain 95%+ test coverage
4. **Integration tests** - Test component interactions, not just units
### Running Tests
```bash
# Run all tests
npm test
# Run tests in watch mode during development
npm test -- --watch
# Run specific test suites
npm test -- --testNamePattern="ProfileManager"
npm test -- --testNamePattern="CLI"
# Run with coverage report
npm run test:coverage
```
### Code Quality Standards
- **TypeScript Strict Mode**: All code must pass strict TypeScript checks
- **ESLint**: Follow the project's ESLint configuration
- **No Console Logs**: Use proper logging mechanisms in production code
- **Error Handling**: All async operations must have proper error handling
- **Resource Cleanup**: Always clean up resources (timeouts, connections, etc.)
### Commit Guidelines
Follow conventional commit format:
```
type(scope): description
Examples:
feat(cli): add new profile export command
fix(transport): resolve timeout cleanup issue
docs(readme): update installation instructions
test(orchestrator): add edge case coverage
```
**Commit Types:**
- `feat`: New features
- `fix`: Bug fixes
- `docs`: Documentation changes
- `test`: Test additions or modifications
- `refactor`: Code refactoring
- `perf`: Performance improvements
- `chore`: Maintenance tasks
### Pull Request Process
1. **Create a feature branch**:
```bash
git checkout -b feature/your-feature-name
```
2. **Write tests first**:
- Create comprehensive test cases
- Ensure tests fail initially (red phase)
3. **Implement your feature**:
- Write minimal code to pass tests (green phase)
- Refactor for quality and maintainability
4. **Ensure quality**:
```bash
# All tests must pass
npm test
# Code must compile without errors
npm run build
# Follow TypeScript strict mode
npm run typecheck
```
5. **Document your changes**:
- Update README if needed
- Add/update JSDoc comments
- Update CHANGELOG.md
6. **Submit pull request**:
- Clear title and description
- Reference any related issues
- Include test results
- Request review from maintainers
### Project Structure
```
src/
├── core/ # Core orchestration and discovery
├── transport/ # MCP communication layers
├── profiles/ # Profile management system
├── discovery/ # Semantic matching algorithms
├── cli/ # Command-line interface
└── types/ # TypeScript type definitions
tests/
├── setup.ts # Jest configuration
└── jest-setup.ts # Environment setup
```
### Feature Development Guidelines
#### Adding New Transport Types
1. Create interface in `src/types/index.ts`
2. Implement transport in `src/transport/`
3. Add comprehensive tests
4. Update orchestrator to support new transport
5. Add CLI commands if needed
#### Extending Semantic Discovery
1. Add test cases in `src/discovery/semantic-matcher.test.ts`
2. Implement matching algorithms
3. Update confidence scoring mechanisms
4. Ensure backward compatibility
#### CLI Command Addition
1. Write CLI tests first in `src/cli/index.test.ts`
2. Implement command handlers
3. Add help documentation
4. Test error handling thoroughly
### Testing Guidelines
#### Unit Tests
- Test individual functions and methods
- Mock external dependencies
- Cover edge cases and error conditions
- Use descriptive test names
#### Integration Tests
- Test component interactions
- Verify end-to-end workflows
- Test real MCP server connections (when possible)
- Validate error propagation
#### Test Structure
```typescript
describe('ComponentName', () => {
beforeEach(() => {
// Setup for each test
});
afterEach(() => {
// Cleanup after each test
});
describe('feature description', () => {
it('should behave correctly in normal case', async () => {
// Test implementation
});
it('should handle error case gracefully', async () => {
// Error case testing
});
});
});
```
### Performance Considerations
- **Token Efficiency**: All features should maintain or improve token reduction
- **Memory Management**: Proper cleanup of resources and event listeners
- **Async Operations**: Use proper async/await patterns
- **Caching**: Consider caching strategies for expensive operations
### Security Guidelines
- **Input Validation**: Validate all external inputs
- **Path Security**: Prevent path traversal attacks
- **Process Security**: Secure child process spawning
- **Error Information**: Don't leak sensitive information in errors
### Documentation Standards
- **JSDoc Comments**: All public APIs must have JSDoc
- **README Updates**: Keep README synchronized with features
- **Example Code**: Provide working examples for new features
- **Architecture Docs**: Update architecture documentation for significant changes
### Getting Help
- **GitHub Issues**: For bugs and feature requests
- **GitHub Discussions**: For questions and general discussion
- **Code Review**: Maintainers will provide feedback on pull requests
### License
By contributing to NCP, you agree that your contributions will be licensed under the Elastic License v2.
---
Thank you for contributing to NCP! Your efforts help make AI tool integration more efficient for everyone.