First off, thank you for considering contributing to Capture MCP Server! It's people like you that make this tool better for everyone.
By participating in this project, you are expected to uphold our Code of Conduct.
Before creating bug reports, please check the existing issues to avoid duplicates. When you create a bug report, please include as many details as possible using our bug report template.
Enhancement suggestions are tracked as GitHub issues. Before creating enhancement suggestions, please check the existing issues. When creating an enhancement suggestion, please use our feature request template.
- Fork the repo and create your branch from
main. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue that pull request!
-
Clone your fork:
git clone https://github.com/your-username/capture-mcp-server.git cd capture-mcp-server -
Install dependencies:
npm install
-
Set up environment variables:
export SAM_GOV_API_KEY=your-api-key -
Build the project:
npm run build
-
Run in development mode:
npm run dev
- We use TypeScript for type safety
- Follow the existing code style
- Use meaningful variable and function names
- Add comments for complex logic
- Keep functions small and focused
- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
- Write tests for new functionality
- Ensure all tests pass before submitting PR
- Include both positive and negative test cases
- Test edge cases
- Update README.md if you change functionality
- Update CLAUDE.md if you add new development commands
- Document new tools in the appropriate section
- Include JSDoc comments for public APIs
capture-mcp-server/
├── src/
│ ├── server.ts # Main MCP server
│ ├── tools/ # Tool implementations
│ │ ├── sam-tools.ts # SAM.gov API tools
│ │ ├── usaspending-tools.ts # USASpending API tools
│ │ └── join-tools.ts # Cross-API tools
│ └── utils/ # Utility functions
│ └── api-client.ts # API client with rate limiting
├── dist/ # Compiled output
└── tests/ # Test files
- Create a new file in
src/tools/or add to existing tool file - Export
getTools()andcallTool()functions - Register the tool in
src/tools/index.ts - Update documentation
- Add tests for the new tool
Example tool structure:
export function getTools() {
return [{
name: "tool-name",
description: "What this tool does",
inputSchema: {
type: "object",
properties: {
// Define parameters
},
required: ["required-params"]
}
}];
}
export async function callTool(name: string, args: any): Promise<any> {
// Implement tool logic
}Feel free to open an issue with your question or reach out to the maintainers.
Thank you for contributing!