Skip to main content
Glama
portel-dev

NCP - Natural Context Provider

by portel-dev
CONTRIBUTING.md6.21 kB
# 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.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/portel-dev/ncp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server