OOREP MCP Server
OpenSSF Scorecard
An MCP server and TypeScript client SDK that gives AI assistants access to
OOREP's homeopathic repertory and materia medica reference data.
TL;DR
import { createOOREPClient } from 'oorep-mcp' ;
const client = createOOREPClient ();
const results = await client.searchRepertory ({ symptom : 'headache worse motion' });
console .log (results.rubrics );
client.destroy ();
Ask your AI assistant: "Search OOREP for remedies for throbbing headache worse from light"
What is OOREP?
OOREP (Open Online Repertory) is an open-source homeopathic database containing:
12+ Repertories - Systematic indexes of symptoms mapped to remedies (Kent, Boger, Boericke, etc.)
Multiple Materia Medicas - Detailed remedy descriptions and therapeutic indications
600+ Remedies - Comprehensive remedy database with names, abbreviations, and alternates
How Homeopathic Data is Structured
graph TB
subgraph Repertory[Repertory Structure]
Chapter[Chapter<br/>e.g. Head]
Rubric[Rubric<br/>e.g. Pain - Throbbing]
R1[Belladonna - 4]
R2[Glonoine - 3]
R3[Natrum mur - 2]
Chapter --> Rubric
Rubric --> R1
Rubric --> R2
Rubric --> R3
end
subgraph MateriaMedica[Materia Medica Structure]
Remedy[Remedy<br/>e.g. Belladonna]
S1[Mind: Sudden onset...]
S2[Head: Throbbing pain...]
S3[...]
Remedy --> S1
Remedy --> S2
Remedy --> S3
end
This MCP server enables AI assistants to query this data programmatically.
Features
Feature Description Search Repertories Query symptoms across 12+ repertories, get matching rubrics with weighted remedies Search Materia Medicas Find remedy descriptions and indications from multiple sources Remedy Information Get comprehensive details for 600+ remedies List Resources Browse available repertories, materia medicas, and remedies Guided Workflows Prompts for symptom analysis, remedy comparison, case repertorization Structured Responses MCP 2025-06-18 compliant with outputSchema and structuredContent Performance Built-in caching (5min TTL), request deduplication, automatic retries Type Safety Full TypeScript with Zod validation on all inputs Security Input sanitization, error message sanitization, no credentials required SDK Adapters Direct integration with OpenAI, Vercel AI SDK, LangChain, Google Gemini
Quick Start
Requires Node.js 22.12 or newer with npm/npx.
1. Add to Claude Desktop
macOS: Edit ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: Edit %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers" : {
"oorep" : {
"command" : "npx" ,
"args" : [ "-y" , "oorep-mcp" ]
}
}
}
2. Restart Claude Desktop
Quit completely (Cmd+Q / Alt+F4), then reopen.
3. Start Using
You: "Search OOREP for remedies for headache worse at night"
Claude will:
Call search_repertory with symptom "headache worse night"
Return matching rubrics with remedies and their weights
Explain the results in context
Installation
NPX (Recommended)
No installation required:
npm Global
npm install -g oorep-mcp
oorep-mcp
npm Local (for SDK usage)
Claude Code
Option A: CLI
claude mcp add oorep -- npx -y oorep-mcp
Option B: Config file (~/.claude.json)
{
"mcpServers" : {
"oorep" : {
"command" : "npx" ,
"args" : [ "-y" , "oorep-mcp" ] ,
"env" : {
"OOREP_MCP_BASE_URL" : "https://www.oorep.com" ,
"OOREP_MCP_LOG_LEVEL" : "info"
}
}
}
}
Verify: Run /mcp in Claude Code
Claude Desktop
Config locations:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers" : {
"oorep" : {
"command" : "npx" ,
"args" : [ "-y" , "oorep-mcp" ] ,
"env" : {
"OOREP_MCP_BASE_URL" : "https://www.oorep.com" ,
"OOREP_MCP_LOG_LEVEL" : "info"
}
}
}
}
Important: Quit completely (Cmd+Q), not just close window.
Codex CLI
Config: ~/.codex/config.toml (macOS/Linux) or C:\Users\<Username>\.codex\config.toml (Windows)
[mcp_servers.oorep]
command = "npx"
args = ["-y" , "oorep-mcp" ]
startup_timeout_sec = 15.0
tool_timeout_sec = 60.0
[mcp_servers.oorep.env]
OOREP_MCP_BASE_URL = "https://www.oorep.com"
OOREP_MCP_LOG_LEVEL = "info"
Or via CLI:
codex mcp add oorep --env OOREP_MCP_BASE_URL=https://www.oorep.com --env OOREP_MCP_LOG_LEVEL=info -- npx -y oorep-mcp
Verify: Run codex mcp list
Gemini CLI
Config: ~/.gemini/settings.json
{
"mcpServers" : {
"oorep" : {
"command" : "npx" ,
"args" : [ "-y" , "oorep-mcp" ] ,
"env" : {
"OOREP_MCP_BASE_URL" : "https://www.oorep.com" ,
"OOREP_MCP_LOG_LEVEL" : "info"
} ,
"timeout" : 30000
}
}
}
Usage Examples
Once installed, you can interact with OOREP through Claude naturally:
Searching for Remedies
You: "Can you search OOREP for remedies for headache that's worse at night?"
Claude will:
Use the search_repertory tool
Search for "headache worse night" in the default repertory
Return matching rubrics with remedy recommendations and their weights
You: "Tell me more about Aconite - what conditions is it used for?"
Claude will:
Use the get_remedy_info tool to fetch details about Aconite
Provide information about its common uses, characteristics, and therapeutic applications
Comparing Remedies
You: "Compare Aconite and Belladonna for fever symptoms"
Claude will:
Use the remedy-comparison prompt
Search materia medicas for both remedies
Provide a side-by-side comparison focusing on fever symptoms
Highlight key differentiating factors
Case Repertorization
You: "I want to repertorize a case with these symptoms: anxiety, palpitations, and insomnia"
Claude will:
Use the repertorization-workflow prompt
Guide you through systematic symptom analysis
Search relevant rubrics for each symptom
Help synthesize results to identify well-indicated remedies
Browsing Available Resources
You: "What repertories are available in OOREP?"
Claude will:
Use the list_available_repertories tool
Show all 12+ available repertories with their names and descriptions
API Reference
search_repertory
Search for symptoms in homeopathic repertories.
Parameters:
Name Type Required Default Description symptomstring Yes - Symptom to search (3-200 chars). Supports wildcards. repertorystring No publicumRepertory abbreviation (e.g., kent, boger) minWeightnumber No 1Minimum remedy weight (1-4) maxResultsnumber No 20Maximum rubrics to return (1-100) includeRemedyStatsboolean No trueInclude aggregated remedy statistics
Returns:
{
totalResults : number ;
rubrics : Array <{
rubric : string ;
text : string | null ;
repertory : string ;
remedies : Array <{
name : string ;
abbreviation : string ;
weight : number ;
}>;
}>;
remedyStats ?: Array <{
name : string ;
abbreviation : string ;
count : number ;
cumulativeWeight : number ;
}>;
}
search_materia_medica
Search materia medica texts for remedy descriptions.
Parameters:
Name Type Required Default Description symptomstring Yes - Symptom to search (3-200 chars) materiamedicastring No boerickeMateria medica abbreviation remedystring No - Filter to specific remedy maxResultsnumber No 10Maximum results (1-50)
Returns:
{
totalResults : number ;
results : Array <{
remedy : string ;
materiaMedica : string ;
sections : Array <{
heading : string ;
content : string ;
depth : number ;
}>;
}>;
}
get_remedy_info
Get detailed information about a specific remedy.
Parameters:
Name Type Required Description remedystring Yes Remedy name, abbreviation, or alternate name (1-100 chars)
Returns:
{
id : number ;
nameAbbrev : string ;
nameLong : string ;
namealt : string [];
} | null
Matching behavior:
Exact match on abbreviation, long name, or alternate names (case-insensitive)
Partial match for queries โฅ3 characters
list_available_repertories
List all accessible repertories.
Parameters:
Name Type Required Description languagestring No Filter by language code (e.g., en, de)
Returns:
Array <{
abbreviation : string ;
title : string ;
author : string ;
language : string ;
}>
list_available_materia_medicas
List all accessible materia medica texts.
Parameters:
Name Type Required Description languagestring No Filter by language code
Returns:
Array <{
abbreviation : string ;
title : string ;
author : string ;
language : string ;
}>
All tools support the MCP 2025-06-18 specification with structured responses:
Response Structure:
{
content : [{
type : 'text' ,
text : '{"totalResults": 42, "rubrics": [...]}'
}],
structuredContent : {
totalResults : 42 ,
rubrics : [...]
}
}
Benefits:
outputSchema : Each tool definition includes a JSON Schema defining the expected output structure
structuredContent : Direct access to typed results without JSON parsing
Backwards Compatible : Text content always included for older clients
Error Handling : Errors return isError: true for LLM self-correction
Resources
URI Description Content Type oorep://remedies/listComplete list of all 600+ remedies JSON oorep://repertories/listAll available repertories with metadata JSON oorep://materia-medicas/listAll available materia medicas JSON oorep://help/search-syntaxSearch syntax guide with examples Text
Prompts
analyze-symptoms
Guided workflow for systematic symptom analysis.
Arguments:
Name Type Required Description symptom_descriptionstring No Initial symptom description
Workflow: Guides through symptom gathering โ modality analysis โ repertory search โ synthesis
remedy-comparison
Compare multiple remedies side-by-side.
Arguments:
Name Type Required Description remediesstring Yes Comma-separated remedy names (2-6 remedies)
Example: remedies: "Aconite, Belladonna, Gelsemium"
repertorization-workflow
Step-by-step case taking and repertorization.
Workflow: 7-step process from symptom collection through remedy differentiation.
Search Syntax
Basic Search
Wildcards
Exact Phrases
"worse at night"
"throbbing pain"
Exclusions
headache -migraine
fever -intermittent
Combined
head * pain -chronic "worse motion"
Tips
Minimum 3 characters per term
Wildcards only at word boundaries
Use repertory-specific terminology for better results
SDK Integration
For programmatic use with AI frameworks, see the SDK Integration Guide .
Supported frameworks: OpenAI, Vercel AI SDK, LangChain/LangGraph, Google Gemini
Quick example:
import { createOOREPClient } from 'oorep-mcp' ;
const client = createOOREPClient ();
const results = await client.searchRepertory ({ symptom : 'headache worse motion' });
console .log (results.rubrics );
client.destroy ();
Configuration
All configuration via environment variables:
Variable Default Description OOREP_MCP_BASE_URLhttps://www.oorep.comOOREP API base URL OOREP_MCP_TIMEOUT_MS30000Request timeout (ms) OOREP_MCP_CACHE_TTL_MS300000Cache TTL (ms), 0 to disable OOREP_MCP_MAX_RESULTS100Maximum results cap OOREP_MCP_LOG_LEVELinfodebug | info | warn | errorOOREP_MCP_DEFAULT_REPERTORYpublicumDefault repertory OOREP_MCP_DEFAULT_MATERIA_MEDICAboerickeDefault materia medica OOREP_MCP_REMOTE_USER(unset) If set, sends X-Remote-User header (numeric member ID) on all upstream requests
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.
Example with custom config:
{
"mcpServers" : {
"oorep" : {
"command" : "npx" ,
"args" : [ "-y" , "oorep-mcp" ] ,
"env" : {
"OOREP_MCP_TIMEOUT_MS" : "60000" ,
"OOREP_MCP_CACHE_TTL_MS" : "600000" ,
"OOREP_MCP_LOG_LEVEL" : "debug"
}
}
}
}
Architecture
graph TB
subgraph Client[MCP Client]
MCPClient((Claude, Codex,<br/>Gemini, etc.))
end
subgraph Server[OOREP MCP Server]
Tools[Tools]
Resources[Resources]
Prompts[Prompts]
SDK[SDK]
subgraph SDKClient[OOREPClient]
Cache[(Cache)]
Dedup[Deduplicator]
Validators[Validators]
end
subgraph HTTPClient[OOREPClient - HTTP]
Session[Session mgmt]
Retry[Retry logic]
Timeout[Timeout handling]
end
Tools --> SDKClient
Resources --> SDKClient
Prompts --> SDKClient
SDK --> SDKClient
SDKClient --> HTTPClient
end
subgraph External[OOREP API]
API[https://www.oorep.com]
end
MCPClient -->|MCP Protocol| Server
HTTPClient -->|HTTPS| API
Key Components:
Cache : In-memory LRU cache with configurable TTL (default 5 min)
Deduplicator : Prevents duplicate concurrent requests for same data
Validators : Zod schemas validate all inputs before API calls
Session Management : Automatic cookie handling for OOREP API
Security Considerations
All inputs are validated using Zod schemas:
Symptom searches : 3-200 characters, trimmed of whitespace
Remedy names : 1-100 characters
Server-side sanitization : The OOREP API handles additional input sanitization
Error Handling
All errors are sanitized before being returned to clients
Internal details (stack traces, file paths) are never exposed
Network errors return generic messages
Data Privacy
No user credentials are stored or required
OOREP sessions are anonymous and cookie-based
No data is persisted to disk (memory cache only)
All inputs validated using Zod schemas
Errors are sanitized before returning to clients
Rate Limiting
The OOREP MCP Server does not implement internal rate limiting. However:
OOREP API Limits
The upstream OOREP API may have rate limits. If you exceed them, you'll receive a RateLimitError:
{
content : [{ type : 'text' , text : 'Error: Rate limit exceeded. Please try again later.' }],
isError : true
}
Mitigation Strategies
Enable caching (default: 5 minutes TTL)
"env" : { "OOREP_MCP_CACHE_TTL_MS" : "300000" }
Reduce concurrent requests by using specific search terms
Increase cache TTL for frequently accessed data
"env" : { "OOREP_MCP_CACHE_TTL_MS" : "600000" }
Request Deduplication
The SDK client automatically deduplicates concurrent identical requests, reducing API load.
TypeScript Type Imports
Import types directly from the package for type-safe development:
import type {
SearchRepertoryArgs ,
SearchMateriaMedicaArgs ,
GetRemedyInfoArgs ,
ListRepertoriesArgs ,
ListMateriaMedicasArgs ,
RepertorySearchResult ,
MateriaMedicaSearchResult ,
RemedyInfo ,
RepertoryMetadata ,
MateriaMedicaMetadata ,
Rubric ,
Remedy ,
MateriaMedicaResult ,
MateriaMedicaSection ,
OOREPClient ,
OOREPSDKConfig ,
} from 'oorep-mcp' ;
Schema Validation
You can also import Zod schemas for runtime validation:
import {
SearchRepertoryArgsSchema ,
RepertorySearchResultSchema ,
RemedyInfoSchema ,
} from 'oorep-mcp' ;
const validated = SearchRepertoryArgsSchema .parse (untrustedInput);
Troubleshooting
Server Not Appearing in Claude Desktop
Problem: The MCP indicator doesn't show up after configuration.
Solutions:
Completely quit Claude Desktop (Cmd+Q on macOS, not just close window)
Restart Claude Desktop and wait 10-15 seconds for MCP initialization
Check the configuration file for valid JSON syntax (use a JSON validator)
Check the logs:
macOS: ~/Library/Logs/Claude/mcp*.log
Windows: %APPDATA%\Claude\Logs\mcp*.log
Verify npx works: Run npx -y oorep-mcp in terminal to check if it starts
Connection Timeout Errors
Problem: "Connection timeout" or "Request timed out" errors.
Solutions:
Increase timeout in configuration:
"env" : {
"OOREP_MCP_TIMEOUT_MS" : "60000"
}
Check network connectivity to https://www.oorep.com :
curl https://www.oorep.com
Check for firewall/proxy issues that might block connections
No Results Returned
Problem: Searches return empty results or "No results found".
Solutions:
Try broader search terms (e.g., "headache" instead of "headache left temple worse 3pm")
Remove filters like minWeight or specific repertory restrictions
Check if OOREP website is accessible at https://www.oorep.com
Try a different repertory:
Ask Claude: "Search in the Kent repertory instead"
High Memory Usage
Problem: MCP server consuming excessive memory.
Solutions:
Reduce cache TTL to clear cache more frequently:
"env" : {
"OOREP_MCP_CACHE_TTL_MS" : "60000"
}
Reduce max results:
"env" : {
"OOREP_MCP_MAX_RESULTS" : "50"
}
Restart Claude Desktop periodically to clear cache
Permission Errors on macOS/Linux
Problem: "Permission denied" when running the server.
Solutions:
For global install: Ensure proper npm permissions
sudo npm install -g oorep-mcp
For npx (recommended): No permissions needed, use -y flag:
Viewing Detailed Logs
To see detailed debug logs for troubleshooting:
Set log level to debug:
"env" : {
"OOREP_MCP_LOG_LEVEL" : "debug"
}
Check MCP logs:
macOS: tail -f ~/Library/Logs/Claude/mcp*.log
Windows: Check %APPDATA%\Claude\Logs\
Look for specific error patterns:
NetworkError - Connection issues
TimeoutError - Request taking too long
ValidationError - Invalid input
RateLimitError - Too many requests
Still Having Issues?
Check existing issues: https://github.com/Dhi13man/oorep-mcp/issues
Report a new issue: Include:
Your OS and version
Node.js version (node --version)
Claude Desktop version
Configuration (remove any sensitive data)
Error logs from MCP log files
Join the discussion: Share your experience and get community help
Development
Prerequisites
Node.js โฅ 22.12.0
npm โฅ 10.0.0
Setup
git clone https://github.com/Dhi13man/oorep-mcp.git
cd oorep-mcp
npm ci
Commands
npm run build
npm run typecheck
npm run dev
npm test
npm run test :watch
npm run test :coverage
npm run test :e2e
npm run lint
npm run format
Test Structure
src/
โโโ **/*.unit.test.ts # Unit tests (mocked dependencies)
โโโ **/*.integration.test.ts # Integration tests (real implementations)
1100+ tests with 95%+ coverage
Unit tests use mocked dependencies
Integration tests use real implementations with mocked HTTP
Disclaimer
This tool is for educational and informational purposes only.
Not medical advice - Not a substitute for professional medical consultation
Consult practitioners - Always consult qualified homeopathic practitioners
Not for diagnosis - Not intended for diagnosing or treating medical conditions
Homeopathic treatment should only be undertaken under the guidance of qualified professionals.
License
MIT License - see LICENSE file for details.
Acknowledgments
OOREP Team : For creating and maintaining the open-source OOREP platform
Anthropic : For the Model Context Protocol and Claude
MCP Community : For tools, documentation, and support
Links