Open Helplines
open-helplines
Stop hallucinating crisis numbers. One MCP import โ always verified.
Open data registry of mental health helplines worldwide. CC0. No API key. No lock-in.

๐ Visualization Site ยท ๐ Docs ยท ๐ฌ Discussions ยท โค๏ธ Sponsor
Quick Start โ MCP (Claude Desktop, any MCP host)
Add to your claude_desktop_config.json and restart Claude Desktop โ zero configuration, zero API key:
{
"mcpServers": {
"open-helplines": {
"command": "npx",
"args": ["@open-helplines/mcp"]
}
}
}Then just ask Claude:
"What are the 24/7 crisis lines in Japan?"
"Find a mental health helpline in Brazil that supports English."
"My user seems to be in distress โ what's the nearest crisis line for Australia?"
Claude returns verified numbers and URLs verbatim from the registry โ never hallucinated.
Three MCP tools available: find_helplines, get_helpline_by_id, list_countries.
See examples/mcp-claude-desktop/README.md for full setup.
Why it matters
The problem: LLMs hallucinate crisis numbers
Mental health chatbots, AI companionship apps, and LLM agents regularly encounter users in crisis. When they try to surface a helpline, they face two bad options:
Commercial lock-in โ directories like ThroughLine charge per query and impose restrictive terms, even when the underlying data is public-domain fact.
Hallucination risk โ without a verified data source, LLMs generate plausible-looking phone numbers that may be wrong. A wrong number when someone is in crisis is not a UX bug โ it's a safety failure.
The solution: open-helplines
open-helplines fills the gap with verified, structured, CC0 data and a production-ready MCP server:
Feature | Detail |
CC0 data | Public domain. Use in any commercial or non-commercial product, including AI training, without attribution. |
JSON Schema | Draft 2020-12. TypeScript types and Python Pydantic models generated from the schema. |
MCP server |
|
Emergency First Resolver | Crisis keywords trigger an instant CVD-safe banner with one-tap call/text/chat links. |
No-Log Crisis Finder | Privacy-preserving search โ no query logging, no user fingerprinting. |
24 countries, growing | AU, BD, BR, CA, CN, DE, EG, FR, GB, ID, IN, JP, KR, MX, NG, NZ, PH, PK, RU, TR, UA, US, VN, ZA |
Features
๐ก๏ธ Safe Answer Guardrails
All MCP tools enforce five guardrails automatically โ no configuration needed:
Guardrail | Behaviour |
Staleness check |
|
Misroute prevention |
|
Fallback chain | No data โ nearby country โ IASP/Befrienders international directory |
Mandatory citation | Every record includes |
Hallucination refusal | Unknown country/ID โ |
See docs/features/safe-answer-mcp-guardrails.md for the full specification.
๐จ Emergency First Resolver
When a user on the visualization site searches crisis-related terms, a CVD-safe banner instantly surfaces the nearest 24/7 helpline with one-tap call/text/chat links.
See docs/features/emergency-first-resolver.md.
๐ No-Log Crisis Finder
Privacy-preserving crisis search: no query logging, no user fingerprinting, no analytics on what people are searching for. See docs/features/no-log-crisis-finder.md.
๐ Visualization Site
Explore the registry visually:
Globe view โ interactive 3D globe with helpline coverage
Heatmap โ choropleth map of coverage density
Network graph โ relationships between organisations
โ kouki-odaka.github.io/open-helplines/en
Integration examples
TypeScript / Node.js
import { loadCountry } from "@open-helplines/core";
const records = await loadCountry("JP");
const crisis = records.filter(r => r.category === "suicide_prevention");
for (const r of crisis) {
console.log(r.name, r.contacts[0].number);
}Python
from open_helplines import Registry
registry = Registry.from_github() # fetches data/index.json + country files
records = registry.find(country="JP", category="suicide_prevention")
for r in records:
print(r.name, r.contacts[0].number)Plain JSON (no dependencies)
# Discover all covered countries
curl -s https://raw.githubusercontent.com/Kouki-odaka/open-helplines/main/data/index.json | \
jq '.countries[] | {country, record_count}'
# All helplines for Japan
curl -s https://raw.githubusercontent.com/Kouki-odaka/open-helplines/main/data/countries/jp/helplines.json | \
jq '.records[] | select(.category == "suicide_prevention") | {name, contacts: [.contacts[].number]}'OpenAI function calling
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "What crisis lines exist in Japan?" }],
tools: [{
type: "function",
function: {
name: "find_helplines",
description:
"Return verified crisis hotlines. Surface phone numbers and URLs verbatim โ never generate them.",
parameters: {
type: "object",
properties: {
country: { type: "string", description: "ISO 3166-1 alpha-2 code, e.g. 'JP'" },
category: { type: "string" },
},
required: ["country"],
},
},
}],
});Full runnable example: examples/openai-function-calling/main.ts
Anthropic tool use
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
tools=[{
"name": "find_helplines",
"description": "Return verified crisis hotlines. Extract contact info verbatim โ never paraphrase.",
"input_schema": {
"type": "object",
"properties": {
"country": {"type": "string"},
"category": {"type": "string"},
},
"required": ["country"],
},
}],
messages=[{"role": "user", "content": "Find mental health lines in Australia."}],
)Full runnable example: examples/anthropic-tool-use/main.py
Local LLM (Ollama)
from openai import OpenAI # Ollama's OpenAI-compatible API
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
# Same tool definition as above โ no API key, fully offlineFull runnable example: examples/local-llama/main.py
JSON Schema
https://raw.githubusercontent.com/Kouki-odaka/open-helplines/main/schemas/helpline.schema.jsonJSON Schema Draft 2020-12 โ single source of truth for all types and validation. (ADR-001)
Contributing
Data corrections and additions are always welcome โ no Discussion needed, open a PR directly.
Data PRs are the fastest way to help: if you know the correct number for a country, add or fix it.
Schema changes require a GitHub Discussion first.
See CONTRIBUTING.md for data format, quality requirements, and commit conventions.
Community
๐ฌ GitHub Discussions โ feature requests, country coverage questions, schema proposals, and general conversation.
We especially welcome contributions from mental health professionals and NPO staff who can verify data accuracy for their country.
Document | Description |
Community standards (Contributor Covenant 2.1) | |
Vulnerability reporting policy | |
Project governance and decision flow | |
Logos, descriptions, and key facts for media use |
Sponsor
open-helplines is free, open, and CC0 โ and will always be. If you find it useful, consider sponsoring to keep the data verified and the tooling maintained:
โค๏ธ Donate via the project site
๐ GitHub Sponsors โ coming soon (see FUNDING.yml)
๐๏ธ Open Collective โ coming soon
License
open-helplines uses dual licensing:
Component | License | Why |
Data ( | Maximally usable โ no friction for crisis tools, AI training, or commercial use | |
Code (TypeScript, Python, scripts, workflows) | Patent protection, attribution-friendly |
You may use the data in any commercial or non-commercial product, including AI systems, without attribution. The code requires the Apache-2.0 notice.
See NOTICE for the dual-license declaration and docs/LICENSING.md for a detailed explanation including commercial use, AI training, and derivative work policies.
Architecture decisions
ADR | Decision |
JSON Schema Draft 2020-12 as single source of truth | |
CC0 data + Apache-2.0 code dual-license | |
Per-country file structure | |
MCP server โ stdio transport, 3 tools |
Disclaimer
open-helplines is a developer tool โ a directory of contact information, not a crisis service.
It cannot assess risk, provide counseling, or respond to emergencies.
Phone numbers are verified periodically, not in real time. Always show the
verified_atdate to end users.If someone is in immediate danger, direct them to local emergency services (911, 119, 999โฆ) first.
See docs/safety/SAFETY.md for the full safety policy and responsible LLM integration guidelines.
If open-helplines saves someone from receiving a wrong crisis number, it's worth a โญ.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kouki-odaka/open-helplines'
If you have feedback or need assistance with the MCP directory API, please join our Discord server