{"id":30752633,"url":"https://github.com/ppenna/onemcp","last_synced_at":"2025-09-04T08:35:37.883Z","repository":{"id":307329704,"uuid":"1029094469","full_name":"ppenna/onemcp","owner":"ppenna","description":"A Dynamic Orchestrator for MCP Servers","archived":false,"fork":false,"pushed_at":"2025-08-29T01:13:32.000Z","size":3708,"stargazers_count":1,"open_issues_count":15,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-29T05:21:38.868Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ppenna.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-30T14:09:57.000Z","updated_at":"2025-08-29T01:13:35.000Z","dependencies_parsed_at":"2025-07-30T19:03:10.935Z","dependency_job_id":null,"html_url":"https://github.com/ppenna/onemcp","commit_stats":null,"previous_names":["ppenna/onemcp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ppenna/onemcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppenna%2Fonemcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppenna%2Fonemcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppenna%2Fonemcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppenna%2Fonemcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ppenna","download_url":"https://codeload.github.com/ppenna/onemcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppenna%2Fonemcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273575901,"owners_count":25130376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-04T08:35:32.246Z","updated_at":"2025-09-04T08:35:37.859Z","avatar_url":"https://github.com/ppenna.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OneMCP\n\nA dynamic orchestrator for MCP Servers.\n\n## Quick Start\n\n### Step 1: Install Development Dependencies (Run Once)\n\n```bash\nsudo apt-get install python3 python3-venv git\n```\n\nThis will:\n\n- Install Python 3\n- Install Python venv for virtual environments\n- Install Git for version control\n\n### Step 2: Clone This Repository (Run Once)\n\n```bash\ngit clone https://github.com/ppenna/onemcp.git\ncd onemcp\n```\n\n### Step 3: Setup Your Development Environment (Run Once)\n\n```bash\n./scripts/setup.sh\n```\n\nThis will:\n\n- Create a virtual environment\n- Install dependencies\n- Set up pre-push Git hooks\n- Configure the development environment\n\n### Step 4: Activate the Virtual Environment (Run Each Session)\n\n```bash\nsource .venv/bin/activate\n```\n\n### Step 5: Run Tests to Verify Setup (Optional)\n\n```bash\npytest\n```\n\n### Step 6: Start OneMCP\n\n```bash\npython -m onemcp.server\n```\n\nThe server will start and listen OneMCP for MCP client connections via stdin/stdout.\n\n## Development\n\n### Setup Your Development Environment\n\n```bash\n# Initial setup (run once)\n./scripts/setup.sh\n\n# Activate virtual environment (run each session)\nsource .venv/bin/activate\n```\n\n### Development Commands\n\n```bash\n# Run tests\npytest\n\n# Run tests with coverage\npytest --cov=onemcp --cov-report=html\n\n# Lint code\nruff check src tests\n\n# Format code\nruff format src tests\n\n# Type checking\nmypy src\n\n# Run all quality checks (same as pre-push hook)\nruff format --check src tests \u0026\u0026 ruff check src tests \u0026\u0026 mypy src \u0026\u0026 pytest\n```\n\n### Project Structure\n\n```text\n├── src/onemcp/              # Main package\n│   ├── __init__.py          # Package initialization\n│   └── server.py            # MCP server implementation\n├── tests/                   # Test suite\n│   ├── __init__.py\n│   └── test_server.py       # Server tests\n├── scripts/                 # Development scripts\n│   ├── setup.sh             # Main setup script\n│   └── install-hooks.sh     # Git hooks installer\n├── hooks/                   # Git hooks\n│   └── pre-push             # Pre-push quality checks\n├── .github/                 # GitHub configuration\n│   ├── workflows/           # CI/CD workflows\n├── pyproject.toml          # Project configuration\n├── requirements.txt        # Dependencies\n└── .editorconfig           # Editor configuration\n```\n\n## Code Quality\n\nThis project maintains high code quality through:\n\n- **Linting**: Ruff for fast Python linting\n- **Formatting**: Ruff formatter for consistent code style\n- **Type Checking**: MyPy for static type analysis\n- **Testing**: Pytest with async support and coverage reporting\n- **Pre-push Hooks**: Automatic quality checks before pushing\n- **CI/CD**: GitHub Actions for continuous integration\n\n### Pre-push Hooks\n\nBefore each push, the following checks run automatically:\n\n1. Code formatting verification\n2. Linting checks\n3. Type checking\n4. Full test suite\n\n## Testing\n\nThe project includes comprehensive tests covering:\n\n- MCP resource handling\n- Tool implementations\n- Error conditions\n- Edge cases\n\nRun tests with:\n\n```bash\n# All tests\npytest\n\n# Specific test file\npytest tests/test_server.py\n\n# Specific test\npytest tests/test_server.py::TestTools::test_say_hello_english -v\n\n# With coverage\npytest --cov=onemcp --cov-report=term-missing\n```\n\n## CI/CD\n\n### GitHub Actions Workflows\n\n- **CI Pipeline** (`.github/workflows/ci.yml`):\n  - Tests on Python 3.9, 3.10, 3.11, 3.12\n  - Code quality checks\n  - Security scanning\n  - Coverage reporting\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/your-feature`\n3. Make your changes\n4. Run quality checks: `pytest \u0026\u0026 ruff check src tests \u0026\u0026 mypy src`\n5. Commit your changes: `git commit -m \"feat: add your feature\"`\n6. Push to the branch: `git push origin feature/your-feature`\n7. Create a Pull Request\n\n### Development Guidelines\n\n- Follow the existing code style (enforced by Ruff)\n- Add tests for new functionality\n- Update documentation as needed\n- Ensure all quality checks pass\n\n## Usage Statement\n\nThis project is a prototype. As such, we provide no guarantees that it will work and you are\nassuming any risks with using the code. We welcome comments and feedback. Please send any questions\nor comments to any of the following maintainers of the project:\n\n- [Pedro Henrique Penna](ppenna@microsoft.com)\n\n| By sending feedback, you are consenting that it may be used in the further development of this project.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppenna%2Fonemcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fppenna%2Fonemcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppenna%2Fonemcp/lists"}