# Contributing Guide

Thank you for your interest in contributing to this MCP server!

## Getting Started

### Prerequisites

- Node.js 18+
- npm 9+
- Git

### Development Setup

1. **Fork and clone the repository**

   ```bash
   git clone https://github.com/YOUR_USERNAME/Israel-law-mcp.git
   cd Israel-law-mcp
   ```

2. **Install dependencies**

   ```bash
   npm install
   ```

3. **Build the project**

   ```bash
   npm run build
   ```

4. **Run tests**

   ```bash
   npm test
   ```

## Development Workflow

### Making Changes

1. Create a branch for your changes:
   ```bash
   git checkout -b feature/your-feature-name
   ```

2. Make your changes

3. Run tests:
   ```bash
   npm test
   ```

4. Build to check for TypeScript errors:
   ```bash
   npm run build
   ```

5. Commit your changes:
   ```bash
   git commit -m "Description of changes"
   ```

6. Push and create a pull request

### Testing with MCP Inspector

To test your changes interactively:

```bash
npx @anthropic/mcp-inspector node dist/index.js
```

This opens a web UI where you can call tools and see responses.

## Code Style

### TypeScript

- Use TypeScript strict mode
- Define interfaces for all function inputs/outputs
- Use async/await for all database operations
- Use `null` for "not found", throw for invalid input

### Naming

- Files: `kebab-case.ts`
- Interfaces: `PascalCase`
- Functions: `camelCase`
- MCP tools: `snake_case`
- Database tables/columns: `snake_case`

### Documentation

- Add JSDoc comments to all exported functions
- Include `@param` and `@returns` tags
- Add usage examples in comments

## Adding a New Tool

1. Create a new file in `src/tools/`:
   ```typescript
   // src/tools/my-tool.ts
   export interface MyToolInput { ... }
   export interface MyToolResult { ... }
   export async function myTool(db: Database, input: MyToolInput): Promise<MyToolResult> { ... }
   ```

2. Add tests in `tests/tools/my-tool.test.ts`

3. Register the tool in `src/index.ts`:
   - Add to `TOOLS` array
   - Add case in `CallToolRequestSchema` handler

4. Update README.md with tool documentation

## Adding New Data

### Adding a New Source

1. Create a seed file in `data/seed/`:
   ```json
   {
     "id": "SOURCE_ID",
     "full_name": "Full Name",
     "items": [ ... ],
     "definitions": [ ... ]
   }
   ```

2. Rebuild the database:
   ```bash
   npm run build:db
   ```

3. Add tests for the new data

4. Update COVERAGE.md

### Updating Existing Data

1. Run the ingestion script:
   ```bash
   npm run ingest -- <identifier> data/seed/source.json
   ```

2. Rebuild the database:
   ```bash
   npm run build:db
   ```

3. Run tests to verify nothing broke:
   ```bash
   npm test
   ```

## Pull Request Guidelines

### Before Submitting

- [ ] Tests pass (`npm test`)
- [ ] Build succeeds (`npm run build`)
- [ ] No TypeScript errors
- [ ] Documentation updated if needed

### PR Description

Include:
- What changes were made
- Why the changes were needed
- How to test the changes

### Review Process

1. Automated checks must pass
2. At least one maintainer review required
3. Address feedback promptly

## Reporting Issues

### Bug Reports

Include:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Environment (Node version, OS)

### Feature Requests

Include:
- Use case description
- Proposed solution (if any)
- Alternatives considered

## Questions?

Open a discussion on GitHub or reach out to the maintainers.

---

Thank you for contributing!
