---
title: "Hanging Context developers"
description: "Call Hanging Context from code: the MCP server, the JSON files, the ask endpoint, rate limits and errors. Free, no key."
canonical: https://hangingcontext.com/developers/
last-updated: 2026-10-16
---

# Hanging Context developers

Hanging Context publishes fresh context for agents. This page shows how to call it from code. Reading is free. No key, account or OAuth is needed.

## MCP server

- URL: `https://hangingcontext.com/mcp` (Streamable HTTP). A plain GET returns JSON that explains how to connect.
- Tools: `hc_ask`, `hc_latest`, `hc_since`, `hc_search`, `hc_get_story`, `hc_sources`, `hc_topics`, `hc_about`. Call `hc_ask` first.
- Server card: https://hangingcontext.com/.well-known/mcp/server-card.json
- Official MCP Registry entry: https://registry.modelcontextprotocol.io/v0/servers/com.hangingcontext%2Fmcp/versions/latest (name `com.hangingcontext/mcp`)

Claude Code:

```
claude mcp add --transport http hangingcontext https://hangingcontext.com/mcp
```

Cursor, in `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "hangingcontext": {
      "url": "https://hangingcontext.com/mcp"
    }
  }
}
```

## SDKs and CLI

Two small client libraries read Hanging Context, one for JavaScript and one for Python. Both only read, need no key and have no dependencies.

- JavaScript: [`hanging-context` 0.1.0 on npm](https://www.npmjs.com/package/hanging-context). Needs Node 18 or newer. Install: `npm install hanging-context`
- Python: [`hanging-context` 0.1.0 on pypi](https://pypi.org/project/hanging-context/). Needs Python 3.9 or newer. Install: `pip install hanging-context`
- Source: [GitHub](https://github.com/Synorb/hanging-context) (the `js` and `python` folders).

JavaScript:

```js
import { ask } from "hanging-context";
const answer = await ask("What did central banks say this week?");
console.log(answer.results[0].name, answer.results[0].manifest_ids);
```

Python:

```python
import hanging_context as hc
answer = hc.ask("What did central banks say this week?")
print(answer["results"][0]["name"], answer["results"][0]["manifest_ids"])
```

Command line:

```bash
hanging-context ask "central bank rates"
hanging-context latest --topic artificial-intelligence
hanging-context story 2026-10-16 robot-world-models-week --md
hanging-context topics
```

Both packages install the hanging-context command. Add --json to ask, latest and topics for raw JSON. With npm, run it with npx hanging-context, or install the package.

## REST and JSON endpoints

The full description is the [OpenAPI file](https://hangingcontext.com/openapi.json). No endpoint needs a key.

- `GET /editions/latest.json`: Get the latest stories
- `GET /n/{topic}/index.json`: Get the stories of one topic
- `GET /stories/{date}/{slug}/index.json`: Get one story as JSON
- `GET /stories/{date}/{slug}/index.md`: Get one story as Markdown
- `GET /roundups/index.json`: List the roundups
- `GET /ask`: Ask a question (GET)
- `POST /ask`: Ask a question (POST)
- `GET /editions/feed.json`: Get the JSON Feed
- `GET /editions/feed.xml`: Get the RSS feed
- `GET /editions/atom.xml`: Get the Atom feed
- `GET /.well-known/reuse.json`: Get the reuse terms
- `GET /mcp`: Get the MCP connection details
- `POST /mcp`: Send an MCP JSON-RPC message

Example, `/editions/latest.json`:

```
curl -s https://hangingcontext.com/editions/latest.json
```

The reply has this shape (values shortened):

```json
{
  "generated_at": "2026-10-16T12:00:00Z",
  "stories": [
    {
      "slug": "example-story-slug",
      "url": "https://hangingcontext.com/stories/2026-10-16/example-story-slug/",
      "headline": "An example headline",
      "dek": "One sentence that says what happened.",
      "published_at": "2026-10-16T12:00:00Z",
      "cited_manifest_ids": [
        "1234567890123456789"
      ]
    }
  ]
}
```

Example, `/ask`:

```
curl -s -X POST https://hangingcontext.com/ask -H 'Content-Type: application/json' -d '{"query": "what happened in AI in the last 12 hours"}'
```

The reply has this shape (values shortened):

```json
{
  "_meta": {
    "response_type": "answer",
    "version": "0.5",
    "protocol": "NLWeb",
    "uses_llm": false,
    "api_version": "1"
  },
  "query": "what happened in AI in the last 12 hours",
  "no_match": false,
  "results": [
    {
      "url": "https://hangingcontext.com/stories/2026-10-16/example-story-slug/",
      "name": "An example headline",
      "description": "A fact copied word for word from the story.",
      "manifest_ids": [
        "1234567890123456789"
      ]
    }
  ]
}
```

## Ask endpoint

`GET https://hangingcontext.com/ask?query=...` or `POST https://hangingcontext.com/ask` with a JSON body that has a `query`. The protocol is NLWeb. The reply copies facts word for word from recent stories and uses no LLM. A GET with no question returns JSON that explains the call. Send `Accept: text/event-stream` to stream.

## Authentication

None. Do not send a key.

## Rate limits

60 calls per 60 seconds per IP address. The limit counts `/ask` calls and MCP tool calls together. The JSON, Markdown and feed files are not counted. `/ask` replies carry the `RateLimit-Policy` and `RateLimit` headers. A refused call returns status 429 with a `Retry-After` header.

## Errors

An error is JSON with the fields `error`, `message` and `next_step`. A missing file returns 404 in the same shape.

```json
{
  "error": "not_found",
  "message": "This page does not exist on Hanging Context.",
  "next_step": "Read https://hangingcontext.com/llms.txt or https://hangingcontext.com/sitemap.xml for the list of pages, or https://hangingcontext.com/developers/ for the API."
}
```

## Versions

The API version is 1. Every JSON response from `/ask` and every JSON file carries the `HC-API-Version` header. Breaking changes ship as a new version. We announce them at least 90 days ahead with Deprecation and Sunset response headers on the old version, and on the /developers page.

## Paging

Paging uses a cursor. Each REST list holds every story of its window, so the REST files have no cursor. To get only the stories that are new since your last call, call the MCP tool hc_since. It returns next_cursor and has_more, and you send next_cursor in your next call.

## More

- [Official MCP Registry entry](https://registry.modelcontextprotocol.io/v0/servers/com.hangingcontext%2Fmcp/versions/latest)
- [npm package](https://www.npmjs.com/package/hanging-context) and [PyPI package](https://pypi.org/project/hanging-context/)
- [llms.txt](https://hangingcontext.com/llms.txt), [developers llms.txt](https://hangingcontext.com/developers/llms.txt) and [agents.md](https://hangingcontext.com/agents.md)
- [Agent skill and plugin on GitHub](https://github.com/Synorb/hanging-context)
- [Reuse terms](https://hangingcontext.com/terms/reuse/)

## Questions and answers

### Is Hanging Context free?

Yes. Reading is free: the pages, the JSON and Markdown files, the feeds, the ask endpoint and the MCP server. You can also reuse the stories, also for commercial use, if you credit Hanging Context, with provenance by Synorb.

### Do I need a key or an account?

No. Every read endpoint is public. There are no accounts, no keys and no OAuth.

### Where do the facts come from?

From Synorb Manifests. Each story uses Manifests from the last 24 hours. Each paragraph cites one or more Manifest ids, and each Manifest links to its original source.

### How do I connect an agent?

Add the MCP server at https://hangingcontext.com/mcp (Streamable HTTP) and call hc_ask with a question. Or send a question to https://hangingcontext.com/ask. Or read the JSON files that the OpenAPI description lists.

### How often is it updated?

Stories are rebuilt every 12 hours, at 00:00 and 12:00 UTC. To get only the stories that are new since your last call, call the MCP tool hc_since with a cursor.

### Is there an SDK or a command line tool?

Yes. The hanging-context package on npm (JavaScript) and the hanging-context package on PyPI (Python) are small read-only clients. Install one with npm install hanging-context or pip install hanging-context. Each one also installs the hanging-context command.

### Is the MCP server in a registry?

Yes. The official MCP Registry lists it as com.hangingcontext/mcp. Entry: https://registry.modelcontextprotocol.io/v0/servers/com.hangingcontext%2Fmcp/versions/latest

### Can I reuse the stories?

Yes, also for commercial use. Credit "Hanging Context, with provenance by Synorb", link to the story and keep the cited Manifest ids. Read the reuse terms at https://hangingcontext.com/terms/reuse/.
