{
  "markdown": "# OOREP MCP Server\n\n[![npm version](https://img.shields.io/npm/v/oorep-mcp.svg)](https://www.npmjs.com/package/oorep-mcp)\n[![CI](https://github.com/Dhi13man/oorep-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Dhi13man/oorep-mcp/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/Dhi13man/oorep-mcp/actions/workflows/codeql.yml/badge.svg)](https://github.com/Dhi13man/oorep-mcp/actions/workflows/codeql.yml)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Dhi13man/oorep-mcp/badge)](https://scorecard.dev/viewer/?uri=github.com/Dhi13man/oorep-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nAn MCP server and TypeScript client SDK that gives AI assistants access to\nOOREP's homeopathic repertory and materia medica reference data.\n\n## TL;DR\n\n```bash\n# Install and run (no setup required)\nnpx -y oorep-mcp\n```\n\n```typescript\n// Or use programmatically\nimport { createOOREPClient } from 'oorep-mcp';\n\nconst client = createOOREPClient();\nconst results = await client.searchRepertory({ symptom: 'headache worse motion' });\nconsole.log(results.rubrics);\nclient.destroy();\n```\n\n**Ask your AI assistant:** *\"Search OOREP for remedies for throbbing headache worse from light\"*\n\n## What is OOREP?\n\n**OOREP (Open Online Repertory)** is an open-source homeopathic database containing:\n\n- **12+ Repertories** - Systematic indexes of symptoms mapped to remedies (Kent, Boger, Boericke, etc.)\n- **Multiple Materia Medicas** - Detailed remedy descriptions and therapeutic indications\n- **600+ Remedies** - Comprehensive remedy database with names, abbreviations, and alternates\n\n### How Homeopathic Data is Structured\n\n```mermaid\ngraph TB\n    subgraph Repertory[Repertory Structure]\n        Chapter[Chapter<br/>e.g. Head]\n        Rubric[Rubric<br/>e.g. Pain - Throbbing]\n        R1[Belladonna - 4]\n        R2[Glonoine - 3]\n        R3[Natrum mur - 2]\n        Chapter --> Rubric\n        Rubric --> R1\n        Rubric --> R2\n        Rubric --> R3\n    end\n\n    subgraph MateriaMedica[Materia Medica Structure]\n        Remedy[Remedy<br/>e.g. Belladonna]\n        S1[Mind: Sudden onset...]\n        S2[Head: Throbbing pain...]\n        S3[...]\n        Remedy --> S1\n        Remedy --> S2\n        Remedy --> S3\n    end\n```\n\nThis MCP server enables AI assistants to query this data programmatically.\n\n## Features\n\n| Feature | Description |\n|---------|-------------|\n| **Search Repertories** | Query symptoms across 12+ repertories, get matching rubrics with weighted remedies |\n| **Search Materia Medicas** | Find remedy descriptions and indications from multiple sources |\n| **Remedy Information** | Get comprehensive details for 600+ remedies |\n| **List Resources** | Browse available repertories, materia medicas, and remedies |\n| **Guided Workflows** | Prompts for symptom analysis, remedy comparison, case repertorization |\n| **Structured Responses** | MCP 2025-06-18 compliant with outputSchema and structuredContent |\n| **Performance** | Built-in caching (5min TTL), request deduplication, automatic retries |\n| **Type Safety** | Full TypeScript with Zod validation on all inputs |\n| **Security** | Input sanitization, error message sanitization, no credentials required |\n| **SDK Adapters** | Direct integration with OpenAI, Vercel AI SDK, LangChain, Google Gemini |\n\n## Quick Start\n\nRequires [Node.js 20 or newer](https://nodejs.org/) with npm/npx.\n\n### 1. Add to Claude Desktop\n\n**macOS:** Edit `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows:** Edit `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"oorep\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"oorep-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Restart Claude Desktop\n\nQuit completely (Cmd+Q / Alt+F4), then reopen.\n\n### 3. Start Using\n\n**You:** \"Search OOREP for remedies for headache worse at night\"\n\n**Claude will:**\n\n1. Call `search_repertory` with symptom \"headache worse night\"\n2. Return matching rubrics with remedies and their weights\n3. Explain the results in context\n\n## Installation\n\n### NPX (Recommended)\n\nNo installation required:\n\n```bash\nnpx -y oorep-mcp\n```\n\n### npm Global\n\n```bash\nnpm install -g oorep-mcp\noorep-mcp\n```\n\n### npm Local (for SDK usage)\n\n```bash\nnpm install oorep-mcp\n```\n\n## Platform Configuration\n\n### Claude Code\n\n#### Option A: CLI\n\n```bash\nclaude mcp add oorep -- npx -y oorep-mcp\n```\n\n#### Option B: Config file (`~/.claude.json`)\n\n```json\n{\n  \"mcpServers\": {\n    \"oorep\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"oorep-mcp\"],\n      \"env\": {\n        \"OOREP_MCP_BASE_URL\": \"https://www.oorep.com\",\n        \"OOREP_MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nVerify: Run `/mcp` in Claude Code\n\n### Claude Desktop\n\n**Config locations:**\n\n- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"oorep\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"oorep-mcp\"],\n      \"env\": {\n        \"OOREP_MCP_BASE_URL\": \"https://www.oorep.com\",\n        \"OOREP_MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\n**Important:** Quit completely (Cmd+Q), not just close window.\n\n### Codex CLI\n\n**Config:** `~/.codex/config.toml` (macOS/Linux) or `C:\\Users\\<Username>\\.codex\\config.toml` (Windows)\n\n```toml\n[mcp_servers.oorep]\ncommand = \"npx\"\nargs = [\"-y\", \"oorep-mcp\"]\nstartup_timeout_sec = 15.0\ntool_timeout_sec = 60.0\n\n[mcp_servers.oorep.env]\nOOREP_MCP_BASE_URL = \"https://www.oorep.com\"\nOOREP_MCP_LOG_LEVEL = \"info\"\n```\n\nOr via CLI:\n\n```bash\ncodex mcp add oorep --env OOREP_MCP_BASE_URL=https://www.oorep.com --env OOREP_MCP_LOG_LEVEL=info -- npx -y oorep-mcp\n```\n\nVerify: Run `codex mcp list`\n\n### Gemini CLI\n\n**Config:** `~/.gemini/settings.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"oorep\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"oorep-mcp\"],\n      \"env\": {\n        \"OOREP_MCP_BASE_URL\": \"https://www.oorep.com\",\n        \"OOREP_MCP_LOG_LEVEL\": \"info\"\n      },\n      \"timeout\": 30000\n    }\n  }\n}\n```\n\n## Usage Examples\n\nOnce installed, you can interact with OOREP through Claude naturally:\n\n### Searching for Remedies\n\n**You:** \"Can you search OOREP for remedies for headache that's worse at night?\"\n\n**Claude will:**\n\n1. Use the `search_repertory` tool\n2. Search for \"headache worse night\" in the default repertory\n3. Return matching rubrics with remedy recommendations and their weights\n\n### Getting Detailed Remedy Information\n\n**You:** \"Tell me more about Aconite - what conditions is it used for?\"\n\n**Claude will:**\n\n1. Use the `get_remedy_info` tool to fetch details about Aconite\n2. Provide information about its common uses, characteristics, and therapeutic applications\n\n### Comparing Remedies\n\n**You:** \"Compare Aconite and Belladonna for fever symptoms\"\n\n**Claude will:**\n\n1. Use the `remedy-comparison` prompt\n2. Search materia medicas for both remedies\n3. Provide a side-by-side comparison focusing on fever symptoms\n4. Highlight key differentiating factors\n\n### Case Repertorization\n\n**You:** \"I want to repertorize a case with these symptoms: anxiety, palpitations, and insomnia\"\n\n**Claude will:**\n\n1. Use the `repertorization-workflow` prompt\n2. Guide you through systematic symptom analysis\n3. Search relevant rubrics for each symptom\n4. Help synthesize results to identify well-indicated remedies\n\n### Browsing Available Resources\n\n**You:** \"What repertories are available in OOREP?\"\n\n**Claude will:**\n\n1. Use the `list_available_repertories` tool\n2. Show all 12+ available repertories with their names and descriptions\n\n## API Reference\n\n### Tools\n\n#### `search_repertory`\n\nSearch for symptoms in homeopathic repertories.\n\n**Parameters:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `symptom` | string | Yes | - | Symptom to search (3-200 chars). Supports wildcards. |\n| `repertory` | string | No | `publicum` | Repertory abbreviation (e.g., `kent`, `boger`) |\n| `minWeight` | number | No | `1` | Minimum remedy weight (1-4) |\n| `maxResults` | number | No | `20` | Maximum rubrics to return (1-100) |\n| `includeRemedyStats` | boolean | No | `true` | Include aggregated remedy statistics |\n\n**Returns:**\n\n```typescript\n{\n  totalResults: number;\n  rubrics: Array<{\n    rubric: string;           // Full path: \"Head > Pain > Throbbing\"\n    text: string | null;      // Additional rubric text\n    repertory: string;        // Repertory abbreviation\n    remedies: Array<{\n      name: string;           // Full name: \"Belladonna\"\n      abbreviation: string;   // \"Bell.\"\n      weight: number;         // 1-4\n    }>;\n  }>;\n  remedyStats?: Array<{       // If includeRemedyStats=true\n    name: string;\n    abbreviation: string;\n    count: number;            // Times appearing\n    cumulativeWeight: number; // Sum of weights\n  }>;\n}\n```\n\n#### `search_materia_medica`\n\nSearch materia medica texts for remedy descriptions.\n\n**Parameters:**\n\n| Name | Type | Required | Default | Description |\n|------|------|----------|---------|-------------|\n| `symptom` | string | Yes | - | Symptom to search (3-200 chars) |\n| `materiamedica` | string | No | `boericke` | Materia medica abbreviation |\n| `remedy` | string | No | - | Filter to specific remedy |\n| `maxResults` | number | No | `10` | Maximum results (1-50) |\n\n**Returns:**\n\n```typescript\n{\n  totalResults: number;\n  results: Array<{\n    remedy: string;           // \"Aconitum napellus\"\n    materiaMedica: string;    // \"boericke\"\n    sections: Array<{\n      heading: string;        // \"Mind\", \"Head\", etc.\n      content: string;        // Section text\n      depth: number;          // Heading depth\n    }>;\n  }>;\n}\n```\n\n#### `get_remedy_info`\n\nGet detailed information about a specific remedy.\n\n**Parameters:**\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `remedy` | string | Yes | Remedy name, abbreviation, or alternate name (1-100 chars) |\n\n**Returns:**\n\n```typescript\n{\n  id: number;\n  nameAbbrev: string;    // \"Acon.\"\n  nameLong: string;      // \"Aconitum napellus\"\n  namealt: string[];     // [\"Aconite\", \"Monkshood\"]\n} | null  // null if not found\n```\n\n**Matching behavior:**\n\n- Exact match on abbreviation, long name, or alternate names (case-insensitive)\n- Partial match for queries ≥3 characters\n\n#### `list_available_repertories`\n\nList all accessible repertories.\n\n**Parameters:**\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `language` | string | No | Filter by language code (e.g., `en`, `de`) |\n\n**Returns:**\n\n```typescript\nArray<{\n  abbreviation: string;  // \"kent\"\n  title: string;         // \"Kent Repertory\"\n  author: string;        // \"James Tyler Kent\"\n  language: string;      // \"en\"\n}>\n```\n\n#### `list_available_materia_medicas`\n\nList all accessible materia medica texts.\n\n**Parameters:**\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `language` | string | No | Filter by language code |\n\n**Returns:**\n\n```typescript\nArray<{\n  abbreviation: string;  // \"boericke\"\n  title: string;         // \"Boericke Materia Medica\"\n  author: string;        // \"William Boericke\"\n  language: string;      // \"en\"\n}>\n```\n\n### Structured Response Format\n\nAll tools support the MCP 2025-06-18 specification with structured responses:\n\n**Response Structure:**\n\n```typescript\n{\n  // Text content for backwards compatibility\n  content: [{\n    type: 'text',\n    text: '{\"totalResults\": 42, \"rubrics\": [...]}' // JSON string\n  }],\n\n  // Machine-parseable structured content\n  structuredContent: {\n    totalResults: 42,\n    rubrics: [...]  // Actual JavaScript object\n  }\n}\n```\n\n**Benefits:**\n\n- **outputSchema**: Each tool definition includes a JSON Schema defining the expected output structure\n- **structuredContent**: Direct access to typed results without JSON parsing\n- **Backwards Compatible**: Text content always included for older clients\n- **Error Handling**: Errors return `isError: true` for LLM self-correction\n\n### Resources\n\n| URI | Description | Content Type |\n|-----|-------------|--------------|\n| `oorep://remedies/list` | Complete list of all 600+ remedies | JSON |\n| `oorep://repertories/list` | All available repertories with metadata | JSON |\n| `oorep://materia-medicas/list` | All available materia medicas | JSON |\n| `oorep://help/search-syntax` | Search syntax guide with examples | Text |\n\n### Prompts\n\n#### `analyze-symptoms`\n\nGuided workflow for systematic symptom analysis.\n\n**Arguments:**\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `symptom_description` | string | No | Initial symptom description |\n\n**Workflow:** Guides through symptom gathering → modality analysis → repertory search → synthesis\n\n#### `remedy-comparison`\n\nCompare multiple remedies side-by-side.\n\n**Arguments:**\n\n| Name | Type | Required | Description |\n|------|------|----------|-------------|\n| `remedies` | string | Yes | Comma-separated remedy names (2-6 remedies) |\n\n**Example:** `remedies: \"Aconite, Belladonna, Gelsemium\"`\n\n#### `repertorization-workflow`\n\nStep-by-step case taking and repertorization.\n\n**Workflow:** 7-step process from symptom collection through remedy differentiation.\n\n## Search Syntax\n\n### Basic Search\n\n```bash\nheadache                    # Simple term\nheadache night              # Multiple terms (AND)\n```\n\n### Wildcards\n\n```bash\nhead*                       # Matches: head, headache, heading\n*ache                       # Matches: headache, stomachache\n```\n\n### Exact Phrases\n\n```bash\n\"worse at night\"            # Exact phrase match\n\"throbbing pain\"            # Must appear together\n```\n\n### Exclusions\n\n```bash\nheadache -migraine          # Headache but not migraine\nfever -intermittent         # Fever excluding intermittent\n```\n\n### Combined\n\n```bash\nhead* pain -chronic \"worse motion\"\n```\n\n### Tips\n\n- Minimum 3 characters per term\n- Wildcards only at word boundaries\n- Use repertory-specific terminology for better results\n\n## SDK Integration\n\nFor programmatic use with AI frameworks, see the **[SDK Integration Guide](docs/SDK.md)**.\n\n**Supported frameworks:** OpenAI, Vercel AI SDK, LangChain/LangGraph, Google Gemini\n\n**Quick example:**\n\n```typescript\nimport { createOOREPClient } from 'oorep-mcp';\n\nconst client = createOOREPClient();\nconst results = await client.searchRepertory({ symptom: 'headache worse motion' });\nconsole.log(results.rubrics);\nclient.destroy();\n```\n\n## Configuration\n\nAll configuration via environment variables:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `OOREP_MCP_BASE_URL` | `https://www.oorep.com` | OOREP API base URL |\n| `OOREP_MCP_TIMEOUT_MS` | `30000` | Request timeout (ms) |\n| `OOREP_MCP_CACHE_TTL_MS` | `300000` | Cache TTL (ms), 0 to disable |\n| `OOREP_MCP_MAX_RESULTS` | `100` | Maximum results cap |\n| `OOREP_MCP_LOG_LEVEL` | `info` | `debug` \\| `info` \\| `warn` \\| `error` |\n| `OOREP_MCP_DEFAULT_REPERTORY` | `publicum` | Default repertory |\n| `OOREP_MCP_DEFAULT_MATERIA_MEDICA` | `boericke` | Default materia medica |\n| `OOREP_MCP_REMOTE_USER` | *(unset)* | If set, sends `X-Remote-User` header (numeric member ID) on all upstream requests |\n\n> The MCP server maintains an anonymous OOREP session automatically. It performs a lightweight bootstrap request to fetch the required cookies and reuses them for subsequent search calls, so no additional authentication setup is necessary for public data.\n\n**Example with custom config:**\n\n```json\n{\n  \"mcpServers\": {\n    \"oorep\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"oorep-mcp\"],\n      \"env\": {\n        \"OOREP_MCP_TIMEOUT_MS\": \"60000\",\n        \"OOREP_MCP_CACHE_TTL_MS\": \"600000\",\n        \"OOREP_MCP_LOG_LEVEL\": \"debug\"\n      }\n    }\n  }\n}\n```\n\n## Architecture\n\n```mermaid\ngraph TB\n    subgraph Client[MCP Client]\n        MCPClient((Claude, Codex,<br/>Gemini, etc.))\n    end\n\n    subgraph Server[OOREP MCP Server]\n        Tools[Tools]\n        Resources[Resources]\n        Prompts[Prompts]\n        SDK[SDK]\n\n        subgraph SDKClient[OOREPClient]\n            Cache[(Cache)]\n            Dedup[Deduplicator]\n            Validators[Validators]\n        end\n\n        subgraph HTTPClient[OOREPClient - HTTP]\n            Session[Session mgmt]\n            Retry[Retry logic]\n            Timeout[Timeout handling]\n        end\n\n        Tools --> SDKClient\n        Resources --> SDKClient\n        Prompts --> SDKClient\n        SDK --> SDKClient\n        SDKClient --> HTTPClient\n    end\n\n    subgraph External[OOREP API]\n        API[https://www.oorep.com]\n    end\n\n    MCPClient -->|MCP Protocol| Server\n    HTTPClient -->|HTTPS| API\n```\n\n**Key Components:**\n\n- **Cache**: In-memory LRU cache with configurable TTL (default 5 min)\n- **Deduplicator**: Prevents duplicate concurrent requests for same data\n- **Validators**: Zod schemas validate all inputs before API calls\n- **Session Management**: Automatic cookie handling for OOREP API\n\n## Security Considerations\n\n### Input Validation\n\nAll inputs are validated using Zod schemas:\n\n- **Symptom searches**: 3-200 characters, trimmed of whitespace\n- **Remedy names**: 1-100 characters\n- **Server-side sanitization**: The OOREP API handles additional input sanitization\n\n### Error Handling\n\n- All errors are sanitized before being returned to clients\n- Internal details (stack traces, file paths) are never exposed\n- Network errors return generic messages\n\n### Data Privacy\n\n- No user credentials are stored or required\n- OOREP sessions are anonymous and cookie-based\n- No data is persisted to disk (memory cache only)\n- All inputs validated using Zod schemas\n- Errors are sanitized before returning to clients\n\n## Rate Limiting\n\nThe OOREP MCP Server does not implement internal rate limiting. However:\n\n### OOREP API Limits\n\nThe upstream OOREP API may have rate limits. If you exceed them, you'll receive a `RateLimitError`:\n\n```typescript\n{\n  content: [{ type: 'text', text: 'Error: Rate limit exceeded. Please try again later.' }],\n  isError: true\n}\n```\n\n### Mitigation Strategies\n\n1. **Enable caching** (default: 5 minutes TTL)\n\n   ```json\n   \"env\": { \"OOREP_MCP_CACHE_TTL_MS\": \"300000\" }\n   ```\n\n2. **Reduce concurrent requests** by using specific search terms\n\n3. **Increase cache TTL** for frequently accessed data\n\n   ```json\n   \"env\": { \"OOREP_MCP_CACHE_TTL_MS\": \"600000\" }\n   ```\n\n### Request Deduplication\n\nThe SDK client automatically deduplicates concurrent identical requests, reducing API load.\n\n## TypeScript Type Imports\n\nImport types directly from the package for type-safe development:\n\n```typescript\nimport type {\n  // Tool argument types\n  SearchRepertoryArgs,\n  SearchMateriaMedicaArgs,\n  GetRemedyInfoArgs,\n  ListRepertoriesArgs,\n  ListMateriaMedicasArgs,\n\n  // Result types\n  RepertorySearchResult,\n  MateriaMedicaSearchResult,\n  RemedyInfo,\n  RepertoryMetadata,\n  MateriaMedicaMetadata,\n\n  // Supporting types\n  Rubric,\n  Remedy,\n  MateriaMedicaResult,\n  MateriaMedicaSection,\n  // SDK Client types\n  OOREPClient,\n  OOREPSDKConfig,\n} from 'oorep-mcp';\n```\n\n### Schema Validation\n\nYou can also import Zod schemas for runtime validation:\n\n```typescript\nimport {\n  SearchRepertoryArgsSchema,\n  RepertorySearchResultSchema,\n  RemedyInfoSchema,\n} from 'oorep-mcp';\n\n// Validate external data\nconst validated = SearchRepertoryArgsSchema.parse(untrustedInput);\n```\n\n## Troubleshooting\n\n### Server Not Appearing in Claude Desktop\n\n**Problem:** The MCP indicator doesn't show up after configuration.\n\n**Solutions:**\n\n1. **Completely quit Claude Desktop** (Cmd+Q on macOS, not just close window)\n2. **Restart Claude Desktop** and wait 10-15 seconds for MCP initialization\n3. **Check the configuration file** for valid JSON syntax (use a JSON validator)\n4. **Check the logs:**\n   - **macOS:** `~/Library/Logs/Claude/mcp*.log`\n   - **Windows:** `%APPDATA%\\Claude\\Logs\\mcp*.log`\n5. **Verify npx works:** Run `npx -y oorep-mcp` in terminal to check if it starts\n\n### Connection Timeout Errors\n\n**Problem:** \"Connection timeout\" or \"Request timed out\" errors.\n\n**Solutions:**\n\n1. **Increase timeout** in configuration:\n\n   ```json\n   \"env\": {\n     \"OOREP_MCP_TIMEOUT_MS\": \"60000\"\n   }\n   ```\n\n2. **Check network connectivity** to <https://www.oorep.com>:\n\n   ```bash\n   curl https://www.oorep.com\n   ```\n\n3. **Check for firewall/proxy issues** that might block connections\n\n### No Results Returned\n\n**Problem:** Searches return empty results or \"No results found\".\n\n**Solutions:**\n\n1. **Try broader search terms** (e.g., \"headache\" instead of \"headache left temple worse 3pm\")\n2. **Remove filters** like `minWeight` or specific repertory restrictions\n3. **Check if OOREP website is accessible** at <https://www.oorep.com>\n4. **Try a different repertory:**\n   **Ask Claude:** \"Search in the Kent repertory instead\"\n\n### High Memory Usage\n\n**Problem:** MCP server consuming excessive memory.\n\n**Solutions:**\n\n1. **Reduce cache TTL** to clear cache more frequently:\n\n   ```json\n   \"env\": {\n     \"OOREP_MCP_CACHE_TTL_MS\": \"60000\"\n   }\n   ```\n\n2. **Reduce max results:**\n\n   ```json\n   \"env\": {\n     \"OOREP_MCP_MAX_RESULTS\": \"50\"\n   }\n   ```\n\n3. **Restart Claude Desktop** periodically to clear cache\n\n### Permission Errors on macOS/Linux\n\n**Problem:** \"Permission denied\" when running the server.\n\n**Solutions:**\n\n1. **For global install:** Ensure proper npm permissions\n\n   ```bash\n   sudo npm install -g oorep-mcp\n   ```\n\n2. **For npx (recommended):** No permissions needed, use `-y` flag:\n\n   ```bash\n   npx -y oorep-mcp\n   ```\n\n### Viewing Detailed Logs\n\nTo see detailed debug logs for troubleshooting:\n\n1. **Set log level to debug:**\n\n   ```json\n   \"env\": {\n     \"OOREP_MCP_LOG_LEVEL\": \"debug\"\n   }\n   ```\n\n2. **Check MCP logs:**\n   - **macOS:** `tail -f ~/Library/Logs/Claude/mcp*.log`\n   - **Windows:** Check `%APPDATA%\\Claude\\Logs\\`\n\n3. **Look for specific error patterns:**\n   - `NetworkError` - Connection issues\n   - `TimeoutError` - Request taking too long\n   - `ValidationError` - Invalid input\n   - `RateLimitError` - Too many requests\n\n### Still Having Issues?\n\n1. **Check existing issues:** <https://github.com/Dhi13man/oorep-mcp/issues>\n2. **Report a new issue:** Include:\n   - Your OS and version\n   - Node.js version (`node --version`)\n   - Claude Desktop version\n   - Configuration (remove any sensitive data)\n   - Error logs from MCP log files\n3. **Join the discussion:** Share your experience and get community help\n\n## Development\n\n### Prerequisites\n\n- Node.js ≥ 20.0.0\n- npm ≥ 10.0.0\n\n### Setup\n\n```bash\ngit clone https://github.com/Dhi13man/oorep-mcp.git\ncd oorep-mcp\nnpm ci\n```\n\n### Commands\n\n```bash\nnpm run build          # Compile TypeScript\nnpm run typecheck      # Type checking only\nnpm run dev            # Development mode with watch\nnpm test               # Run all tests\nnpm run test:watch     # Watch mode\nnpm run test:coverage  # Coverage report\nnpm run test:e2e       # Live OOREP integration (requires network access)\nnpm run lint           # ESLint\nnpm run format         # Prettier\n```\n\n### Test Structure\n\n```text\nsrc/\n├── **/*.unit.test.ts        # Unit tests (mocked dependencies)\n└── **/*.integration.test.ts # Integration tests (real implementations)\n```\n\n- **1100+ tests** with **95%+ coverage**\n- Unit tests use mocked dependencies\n- Integration tests use real implementations with mocked HTTP\n\n## Disclaimer\n\n**This tool is for educational and informational purposes only.**\n\n- **Not medical advice** - Not a substitute for professional medical consultation\n- **Consult practitioners** - Always consult qualified homeopathic practitioners\n- **Not for diagnosis** - Not intended for diagnosing or treating medical conditions\n\nHomeopathic treatment should only be undertaken under the guidance of qualified professionals.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- **OOREP Team**: For creating and maintaining the open-source OOREP platform\n- **Anthropic**: For the Model Context Protocol and Claude\n- **MCP Community**: For tools, documentation, and support\n\n## Links\n\n- **OOREP Website**: <https://www.oorep.com>\n- **OOREP GitHub**: <https://github.com/nondeterministic/oorep>\n- **MCP Documentation**: <https://modelcontextprotocol.io>\n- **Issue Tracker**: <https://github.com/Dhi13man/oorep-mcp/issues>\n- **npm Package**: <https://www.npmjs.com/package/oorep-mcp>\n- **Support Development**: <https://www.buymeacoffee.com/dhi13man>\n",
  "bytes": 24366,
  "sha": "a4802ea75d20f197492e3d0586c15be537b487264e973d40922b4099aae53763",
  "repo_slug": "dhi13man/oorep-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_dhi13man_oorep_mcp_85c8cd6c/readme"
}