globalhelplines.org

Model Context Protocol

A tool your agent calls instead of a number it remembers.

Remote, streamable HTTP. No install, no local process — add one URL and the model gets two tools with full provenance in every result.

Server URL
https://globalhelplines.org/mcp

Adding it

Config format varies slightly between clients, but the endpoint is the same everywhere. Without a key you're on the anonymous tier; with one, add it as a bearer header.

Client config — no key
{
  "mcpServers": {
    "globalhelplines": {
      "url": "https://globalhelplines.org/mcp"
    }
  }
}
Client config — with a key
{
  "mcpServers": {
    "globalhelplines": {
      "url": "https://globalhelplines.org/mcp",
      "headers": {
        "Authorization": "Bearer hl_<40 hex>"
      }
    }
  }
}

Tools

Exactly two. There is deliberately no open-ended search tool — a lookup that requires both a country and a topic is what keeps this a safety utility rather than a scrapeable directory.

get_helplines

Find crisis helplines for one country and one topic. Returns up to 10 services per page with full contact channels and validation provenance. Both country and topic are required.

Input schema
{
  "country":        "string, /^[A-Za-z]{2}$/, required",
  "topic":          "enum — see GET /v1/topics, required",
  "region":         "string, optional",
  "language":       "string, optional",
  "contact_method": "phone|sms|whatsapp|chat|email|app|in_person, optional",
  "keyword":        "string, 2–100 chars, optional",
  "page":           "integer, 1–1000, optional"
}
Example call
// suicide lines in California (returns California + US national)
{
  "name": "get_helplines",
  "arguments": { "country": "US", "topic": "suicide", "region": "CA" }
}
get_service

Fetch one service by its exact id, returning the full record including validation provenance. Use it to re-verify or re-present a service the agent already found — it is not a search tool.

Input schema & call
{ "id": "string, /^[A-Za-z]{2}-\d{3}$/, required" }

{ "name": "get_service", "arguments": { "id": "US-015" } }

What comes back

One text content block containing the same JSON envelope the REST API returns. The two surfaces run the same query core, so they are incapable of returning different data for the same arguments. Real records, abbreviated:

Envelope
{
  "meta": { "dataset_version": "…", "disclaimer": "…" },
  "query": { "country": "US", "topic": "suicide", "region": "CA", "page": 1 },
  "page": 1,
  "page_size": 10,
  "total": 14,
  "results": [
    {
      "id": "US-015",
      "name": "988 Suicide & Crisis Lifeline",
      "categories": ["suicide", "mental_health", "substance_abuse", "general_crisis"],
      "contact": {
        "phone": "988",
        "sms": "988",
        "chat_url": "https://chat.988lifeline.org/"
      },
      "hours": "24/7",
      "languages": ["en", "es"],
      "coverage": "national",
      "cost": "free",
      "anonymous": true,
      "source_url": "https://988lifeline.org/",
      "source_type": "official_site",
      "grades": { "existence": "A+", "accuracy": "A", "quality": "A" },
      "lastVerified": "2026-08-20"
    },
    {
      "id": "US-CA-002",
      "name": "Didi Hirsch Mental Health Services — Crisis Line",
      "categories": ["suicide", "mental_health", "general_crisis", "substance_abuse"],
      "contact": {
        "phone": ["800-854-7771", "877-727-4747"],
        "chat_url": "https://didihirsch.org/suicide-prevention/crisis-line/",
        "in_person": "10277 W Olympic Blvd, Los Angeles, CA 90064"
      },
      "hours": "24/7",
      "languages": ["en", "es", "ko", "zh"],
      "coverage": "regional:Los Angeles County",
      "region": "US-CA",
      "source_url": "https://didihirsch.org/suicide-prevention/crisis-line/",
      "source_type": "official_site",
      "grades": { "existence": "D", "accuracy": "D", "quality": "A" },
      "corrections": {
        "contact.phone": {
          "raw": ["800-854-7771", "877-727-4747"],
          "corrected": ["988"]
        }
      },
      "lastVerified": "2026-08-04"
    }
  ]
}

The second record is worth reading closely: a real regional service, graded D on existence and accuracy because the numbers in the entry don't appear on the operator's own site, which directs callers to 988 instead. It still ships, with the disagreement recorded in corrections and explained in grade_rationale. That is what "graded, not filtered" means.

Behaviour worth knowing

Errors are tool results

Validation failures, not-founds and quota limits come back as isError: true results carrying the same error object the REST API returns — so the model can read and explain them. Bad API keys and burst limits reject at HTTP level instead.

Only tool calls cost quota

Protocol traffic — initialize, tools/list — consumes nothing. Your budget is spent on lookups only, on the same tiers as REST.

Present values verbatim

The tool descriptions instruct the model never to reformat a number or URL, to prefer well-graded and recently verified records, and to say so out loud when a record is weakly verified.

Ranked by verification

Results are ordered best-verified first, because the top result is the one an assistant will read aloud to a person in crisis. Confidence is the only defensible ranking signal in this data.

This directory is informational and is not a substitute for local emergency services. Grades are a confidence signal, not a guarantee — services change numbers, move, and close. Check each record's grades and lastVerified date, and present them alongside any contact detail.

Full REST reference →  ·  Quickstart →