Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
Wall-clock awareness for LLM agents. Two tools: elapsed-time-between-turns + day rollover detection.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
Authorization标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"temporal": {
"command": "uvx",
"args": [
"temporal-mcp"
]
}
}
}在终端中运行这条命令
claude mcp add --transport http temporal https://temporal-mcp.dev/mcp --header 'Authorization: your-value'claude mcp add temporal -- uvx temporal-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"temporal": {
"url": "https://temporal-mcp.dev/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"temporal": {
"command": "uvx",
"args": [
"temporal-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"temporal": {
"type": "http",
"url": "https://temporal-mcp.dev/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"temporal": {
"type": "stdio",
"command": "uvx",
"args": [
"temporal-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
你的选择通过 Cookie 保存在这台设备上,无需账户。
Authorization 机密 必填 HTTP header这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 MirrorEthic 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:Authorization
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(0.2.0)于6个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Your model knows calculus but not what day it is. Fix that.
temporal-mcp is a tiny Model Context Protocol server that gives LLM agents a sense of time *between turns*. Two tools, a few hundred lines, stdlib + mcp + platformdirs. That's the whole thing.
Open a fresh chat at 11 PM. The model says "good morning." Resume a conversation three weeks later. The model picks up mid-sentence like no time passed. Ask for "today's status." Get yesterday's status. Or last Tuesday's.
LLMs don't have wall clocks. They don't know when the last user message was, whether the calendar flipped, or whether this is a fresh thread or one resumed after a long gap. Most of the time this is harmless. Sometimes it makes your agent sound like it just woke up from cryosleep.
A persistent per-thread last-seen log, exposed as two MCP tools:
That's it. Time exists. Your model should know that.
curl -s -X POST https://temporal-mcp.dev/mcp \
-H "Content-Type: application/json" \ -H "Authorization: Bearer $(uuidgen)" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{ "name":"temporal_tick", "arguments":{"thread_key":"try-it","tz_offset_minutes":-360,"tz_name":"MDT"}}}' \ | python3 -c 'import sys,json; print(json.load(sys.stdin)"result"0)'
You'll see something like:
[temporal] Wed May 13, 10:42 AM MDT | fresh thread (no prior history)
{...JSON payload...}
Run it twice and the second response shows the gap. Run it tomorrow and you'll get day rollover: yes. That's the whole point.
Every tick returns a human-readable header and a JSON payload:
[temporal] Wed May 13, 9:42 AM MDT | last prompt 14m ago (Wed 9:28 AM)
{"thread_key": "mcp:abc123", "now": 1747158120.0, "prev": 1747157280.0, "delta_sec": 840, "day_rollover": false, "fresh_thread": false, "tz_name": "MDT", "tz_offset_sec": -21600, "available": true, "error": ""}
The header is for the model. The JSON is for your code, in case you want to do something interesting with day_rollover (greet differently, reload context, recompute "today's items") or with delta_sec (decay relevance, detect a resumed session, flag idle threads).
If you use claude.ai web, ChatGPT, or anything else that wants a *remote* MCP server, point your connector at:
https://temporal-mcp.dev/mcp
There are two ways to authenticate, depending on what your client UI exposes:
Both claude.ai and ChatGPT's custom connector UIs require OAuth 2.0 with a Client ID and Client Secret. The hosted endpoint is a full OAuth provider — visit https://temporal-mcp.dev/connect and click Generate OAuth Credentials. You'll get a fresh client_id + client_secret pair, shown once. Paste them into your client's connector config. That's the entire signup.
No email, no password, no account record — the credential pair *is* the identity. We store only a SHA-256 of the secret, so we never see the plaintext. Generate a new pair any time you want a fresh timeline.
Claude.ai setup: Settings → Connectors → Add custom connector. URL https://temporal-mcp.dev/mcp. Paste your Client ID and Client Secret. Connect. The auto-approve flow redirects you back, claude.ai exchanges the code for a token, and you're done.
ChatGPT setup: Same idea — Settings → Connectors → Custom MCP. Same URL, same credentials.
If your client supports custom HTTP headers (most do), skip OAuth and just send any opaque string as a bearer token:
Authorization: Bearer <any opaque string you choose>
Pick a UUID, a passphrase, anything. We SHA-256 it before storing anything; same identity-is-the-credential property as the OAuth flow, without the dance. This is the original lowest-ceremony path and works for any client that lets you set a custom header.
If your client's connector UI only exposes a URL field — no headers, no auth, no OAuth — embed your token directly in the path:
https://temporal-mcp.dev/mcp/<any opaque string you choose>
Or as a query parameter, if the path form gets stripped:
https://temporal-mcp.dev/mcp?token=<any opaque string you choose>
Same SHA-256 hashing, same identity model. URL-embedded tokens leak more easily than header tokens (proxy logs, referrers), so this path is a pragmatic fallback rather than the default — but the threat in our model is "someone advances your timeline," not data exposure. Rotate by picking a new random string any time you suspect the URL has been logged where it shouldn't be.
No signup. No email. No PII. The hosted endpoint is free, rate-limited to 60 requests/minute per credential. If you outgrow that, self-host (see below).
For desktop/IDE MCP clients, pip install the Python package and run it locally. No network round-trip, state lives on your disk, no auth needed.
pip install temporal-mcp
Python 3.9+. Linux, macOS, Windows.
Run as stdio:
temporal-mcp # or: python -m temporal_mcp
{
"mcpServers": { "temporal": { "command": "temporal-mcp" } } }
Same idea — point the client at the temporal-mcp command.
The hosted endpoint at temporal-mcp.dev runs on Cloudflare Workers backed by D1. If you want your own instance — for privacy, scale, or to ship it as part of a larger product — the entire deploy lives in workers/:
cd workers
npm install npx wrangler login npx wrangler d1 create temporal_mcp # creates the database
npx wrangler d1 migrations apply temporal_mcp --remote npx wrangler deploy
Free tier covers ~100k requests/day forever. Set REQUIRE_AUTH=true in [vars] to refuse anonymous traffic. The Worker is ~400 lines of TypeScript and has its own unit tests (workers/test/).
temporal_tickAdvance the clock for a thread and return a snapshot. Call once per user turn.
| Field | Type | Notes |
|---|---|---|
thread_key | string, optional | Stable conversation/session ID. claude.ai web: conversation ID. Cursor: window/workspace ID. Anything else: any caller-stable string. Omit it and you get a default hostname+cwd hash — fine for local testing, not for serving multiple threads. |
client_id | string, optional | Namespace tag (e.g. "caweb", "cursor"). Defaults to "mcp". Use distinct tags per client so threads don't collide in shared state. |
temporal_peekRead-only. Same shape, doesn't advance state. Use it when you want the gap delta but the call isn't the canonical "one tick per user turn" event.
Per-thread last-seen state lives at:
| Platform | Path |
|---|---|
| Linux | ~/.local/share/temporal-mcp/state.json |
| macOS | ~/Library/Application Support/temporal-mcp/state.json |
| Windows | %LOCALAPPDATA%\temporal-mcp\state.json |
Override with TEMPORAL_MCP_STATE_DIR=/some/path.
State writes are flock-safe on POSIX and atomically replaced via os.replace, so multiple agents pointing at the same state directory will not corrupt each other. (Windows falls back to an in-process lock — fine for a single MCP server, not designed for cross-process contention.)
python -m temporal_mcp gc # prune threads > 30d idle
python -m temporal_mcp gc 7 # prune threads > 7d idle
Not exposed as an MCP tool on purpose — a model that can prune its own memory of "when did we last talk" will eventually do it at exactly the wrong moment. Run it from cron if you care.
{client_id}:{key}. Reserve a unique client_id per surface so threads from claude.ai web don't collide with a local Cursor session sharing the same state directory.available: false with an error field and the header says gap: unknown. It does not silently lie and call it a fresh thread — a model that thinks every turn is fresh will keep saying good morning forever.tick() runs in a daemon thread with a 100 ms timeout so a stalled state read can't block your hook budget. If it times out, you get the honest-failure snapshot above.Mcp-Session-Id and friends, configurable timezone overrideresume: true flag past N hours) so agents can branch on resumed sessions without doing the math themselvesMIT. See LICENSE.
Built by Garret Sutherland / MirrorEthic LLC, extracted from the temporal layer of a larger cognitive-mesh project where this primitive was load-bearing enough to deserve its own package.
mcp-name: io.github.MirrorEthic/temporal-mcp