|
| 1 | +# Contributing to NetBox MCP Server |
| 2 | + |
| 3 | +Thanks for your interest in contributing! This guide covers what kinds of contributions we're looking for, how to propose them, and where the project's boundaries are. |
| 4 | + |
| 5 | +Questions that don't need a code change are best asked in the `#ai` channel on [NetDev Community Slack](https://netdev.chat/) - this project doesn't have dedicated community channels yet. |
| 6 | + |
| 7 | +## Project scope |
| 8 | + |
| 9 | +The NetBox MCP Server is a **simple, read-only MCP server for core NetBox objects**. It uses the NetBox REST API with static token authentication. The priorities are: |
| 10 | + |
| 11 | +- **Easy to get started.** Minimal configuration, minimal dependencies, runs locally in under a minute. |
| 12 | +- **Hard to misuse.** Read-only by design, no plugin surface, small attack surface. |
| 13 | +- **Easy to fork.** Apache 2.0 licensed, small codebase, designed to be adapted. |
| 14 | + |
| 15 | +This project is maintained by a small team - scope is deliberately limited so it stays that way. We may decline feature proposals that fall outside the areas listed below, even if they're well-executed. |
| 16 | + |
| 17 | +### Forking is a first-class option |
| 18 | + |
| 19 | +If your use case needs features outside this scope, forking is actively encouraged. The project is small and focused by design - your fork can diverge without losing the core. We welcome issues or discussions that share interesting forks back with the community. |
| 20 | + |
| 21 | +## Reporting bugs |
| 22 | + |
| 23 | +Bug reports should describe unintended or unexpected behaviour - not requests for new functionality (see "Feature requests" below for that). |
| 24 | + |
| 25 | +1. Check you're running the [latest release](https://github.com/netboxlabs/netbox-mcp-server/releases) - your bug may already be fixed. |
| 26 | +2. Search [existing issues](https://github.com/netboxlabs/netbox-mcp-server/issues) to see if it's been reported. If so, add a 👍 reaction and any extra context as a comment. |
| 27 | +3. If it's new, [open an issue](https://github.com/netboxlabs/netbox-mcp-server/issues/new) with clear reproduction steps, error messages, and NetBox/Python versions. |
| 28 | + |
| 29 | +Tips: |
| 30 | + |
| 31 | +- Screenshots and exact error messages are especially helpful. |
| 32 | +- Don't prepend your issue title with a label like `[Bug]` - labels are applied by maintainers. |
| 33 | + |
| 34 | +## Feature requests |
| 35 | + |
| 36 | +Before opening a feature request: |
| 37 | + |
| 38 | +1. **Check the scope section above.** If your idea falls outside the project's scope, please consider a fork rather than an FR. |
| 39 | +2. **Search existing issues** to avoid duplicates. |
| 40 | +3. **Open an issue for discussion first.** Don't start implementation until a maintainer has confirmed scope fit. |
| 41 | + |
| 42 | +In-scope contributions we're especially keen to see: |
| 43 | + |
| 44 | +- Bug fixes in existing tools |
| 45 | +- Improvements to error messages and logging |
| 46 | +- Documentation, examples, and quickstart improvements |
| 47 | +- Adding new core NetBox object types to `src/netbox_mcp_server/netbox_types.py` |
| 48 | +- Compatibility fixes for new NetBox versions |
| 49 | +- Dependency updates |
| 50 | + |
| 51 | +## Submitting pull requests |
| 52 | + |
| 53 | +For non-trivial changes, please **open an issue first**. This saves you time - if the change isn't a good fit, we can tell you before you write the code. Drive-by bug fixes and small docs improvements don't need an issue first - just send a PR. |
| 54 | + |
| 55 | +Our process for larger changes: |
| 56 | + |
| 57 | +1. Open an issue describing the bug or feature. |
| 58 | +2. Wait for maintainer response confirming scope and approach. |
| 59 | +3. Submit a PR referencing the issue. |
| 60 | +4. Respond to review feedback. |
| 61 | +5. Maintainer merges. |
| 62 | + |
| 63 | +PR checklist: |
| 64 | + |
| 65 | +- Base off `main`. |
| 66 | +- Conventional commit format (`feat:`, `fix:`, `chore:`, etc. - see [`CLAUDE.md`](CLAUDE.md) for details). |
| 67 | +- `ruff check` passes. |
| 68 | +- Type hints on all public functions. |
| 69 | + |
| 70 | +Detailed code standards live in [`CLAUDE.md`](CLAUDE.md) - please skim it before your first PR. |
| 71 | + |
| 72 | +## AI-assisted contributions |
| 73 | + |
| 74 | +AI-assisted contributions are welcome. We use AI tools ourselves. That said, you're responsible for what you submit - review it, test it, and take ownership. PRs that appear to be unreviewed AI output will be asked for revision or closed. |
| 75 | + |
| 76 | +## Other ways to contribute |
| 77 | + |
| 78 | +Not every useful contribution is code: |
| 79 | + |
| 80 | +- Answering questions in discussions or issues |
| 81 | +- Writing a blog post or video about your use case |
| 82 | +- Sharing useful forks back via issues or discussions |
| 83 | +- Improving documentation |
0 commit comments