Skip to documentation
TaimDocumentation
DEVELOPERS / MODEL CONTEXT PROTOCOL

Your context.
Connected.

Bring your Taim threads and memories into the AI tools you use. Find the context you need, then save what comes next.

Remote MCP serverStreamable HTTPOAuth
Server endpoint
https://mcp.trytaim.com/mcp

Taim exposes seven tools: five to read your context and two to create threads and add notes. Connect an MCP-compatible assistant, sign in with your Taim account, and use the tools in conversation.

Connect your assistant

Quickstart

You need a Taim account and a client that supports remote MCP with OAuth. Choose your client, add the server, and complete the browser sign-in.

Connect from your terminal

Terminal
claude mcp add --transport http taim https://mcp.trytaim.com/mcp

Start Claude Code and run /mcp. Select taim and follow the browser sign-in. The server should show as connected.

Claude Code setup guide
Try your first prompt

“Use Taim to show my recent threads, then help me pick up where I left off.”

Using another client? Add the endpoint as a Streamable HTTP server with OAuth. Configuration formats vary by client; no local Taim server is needed.

Authentication & access

Sign in with the same account you use in Taim. The client discovers the authorization server and completes an OAuth flow. Your account determines which data each tool can access.

Threads
Threads you own, plus threads where you are an active member. Leaving a thread or being removed ends that shared access.
Shared context
Shared entries are visible to members. Tasks and proposals returned from a shared thread are your own.
Memories
Searches return personal memories associated with the signed-in user.
Write access
Creating threads and adding entries take effect when called. Your client may ask for confirmation. Shared-thread notes are visible to other members.

All seven tools are declared non-destructive. The current tool set has no delete, archive, task execution, or calendar management tool. Disconnect Taim in your client when you no longer want to use the connection.

Tool reference

Tool names and arguments below match the server. Call them through your MCP client’s tools/call method; they are not separate REST endpoints.

All Taim MCP tools
ToolAccessUse it to
list_threadsReadBrowse your threads
search_threadsReadFind relevant threads
get_threadReadRead a thread
search_memoriesReadRecall personal memories
pull_contextReadGet context in one call
create_threadWriteCreate or reuse a thread
add_thread_entryWriteSave a note to a thread

Required parameters have no default. All examples use fictional data; response examples show the result payload, without the MCP envelope. Nested thread and entry objects are shortened for readability.

List threads you own and threads shared with you, ordered by most recent activity. Start here when you want to browse or find a thread ID.

Parameters

limitintegerdefault: 50

Maximum threads to return. Clamped to 1–100.

include_archivedbooleandefault: false

Include archived threads in the list.

Returns

threads and count. Each thread contains id, title, thread_kind, summary, last_entry_preview, last_active_at, open_task_count, status, and access (owner or member). count is the number returned, not a total across your account.

tools/call · params
{
  "name": "list_threads",
  "arguments": {
    "limit": 10,
    "include_archived": false
  }
}
Example result
Result payload
{
  "threads": [
    {
      "id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
      "title": "Japan trip",
      "thread_kind": "travel",
      "summary": "Planning an autumn trip to Japan.",
      "last_entry_preview": "Stay in Asakusa for the first few nights.",
      "last_active_at": "2026-09-18T16:30:00Z",
      "open_task_count": 0,
      "status": "active",
      "access": "owner"
    }
  ],
  "count": 1
}
  • Use get_thread to read entries, tasks, and proposals. This list does not include full thread contents.
  • There is no cursor or offset parameter. Increase limit to return more threads, up to 100.

Search owned and shared threads by meaning and keywords. Ask a natural-language question even if you do not know the thread title.

Parameters

querystringrequired

Search text. Required; cannot be empty or whitespace.

limitintegerdefault: 20

Maximum matching threads. Clamped to 1–100.

Returns

results and count. Each result contains thread_id, title, thread_kind, summary, score, source, and access. source identifies the matching recall method: vector, lexical, or centroid.

tools/call · params
{
  "name": "search_threads",
  "arguments": {
    "query": "What have I planned for Japan?",
    "limit": 5
  }
}
Example result
Result payload
{
  "results": [
    {
      "thread_id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
      "title": "Japan trip",
      "thread_kind": "travel",
      "summary": "Planning an autumn trip to Japan.",
      "score": 0.8421,
      "source": "vector",
      "access": "owner"
    }
  ],
  "count": 1
}
  • Scores are relevance signals, rounded to four decimal places; they are not probabilities.
  • Results identify threads. Call get_thread for their contents, or pull_context to retrieve relevant content in one call.
  • If semantic recall is unavailable, this tool returns an empty results array. An empty result alone does not prove you have no matching threads.

Read one thread with recent entries, open tasks, and pending proposals. Use an ID returned by list_threads, search_threads, or create_thread.

Parameters

thread_idstringrequired

ID of a thread you own or actively belong to. Required.

entry_limitintegerdefault: 50

Maximum recent entries to include. Clamped to 1–100.

Returns

thread, entries, proposals, tasks, handled_tasks, reflect_prompt, entry_limit, and has_more_entries. thread is the thread header; entries include content and attribution. has_more_entries indicates older entries exist beyond the returned window.

tools/call · params
{
  "name": "get_thread",
  "arguments": {
    "thread_id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
    "entry_limit": 10
  }
}
Example result
Result payload
{
  "thread": {
    "id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
    "title": "Japan trip",
    "thread_kind": "travel",
    "status": "active"
  },
  "entries": [
    {
      "id": "ee7d18ae-3e31-4661-b4ef-2d12cc765fd5",
      "title": "Where to stay",
      "entry_type": "note",
      "content": "Stay in Asakusa for the first few nights."
    }
  ],
  "proposals": [],
  "tasks": [],
  "handled_tasks": [],
  "reflect_prompt": null,
  "entry_limit": 10,
  "has_more_entries": false
}
  • On shared threads, entries belong to the whole thread. Tasks and proposals are scoped to your own account.
  • There is no entry cursor. You can increase entry_limit up to 100; this tool does not expose full-history pagination.
  • Missing and inaccessible threads both return ‘Thread not found’.

Search your personal Taim memories for relevant facts and relationships. Memories are personal context, separate from the entries inside a thread.

Parameters

querystringrequired

A question or description of the facts to recall. Required; cannot be blank.

limitintegerdefault: 5

Maximum memory search results. Clamped to 1–50.

Returns

results and relations, passed through from the memory service. Individual item fields depend on that service. If it is unavailable, both arrays are empty and note is ‘memory service unavailable’.

tools/call · params
{
  "name": "search_memories",
  "arguments": {
    "query": "What are my travel preferences?",
    "limit": 5
  }
}
Example result
Result payload
{
  "results": [],
  "relations": [],
  "note": "memory service unavailable"
}
  • This searches the authenticated user's memories, including when they have access to shared threads.
  • An empty successful search is valid. The example below illustrates the separate unavailable-service response.

Retrieve relevant threads and personal memories together. This is the best starting point when an assistant needs background for a question or a plan.

Parameters

querystringrequired

The question or topic you need context for. Required; cannot be blank.

thread_limitintegerdefault: 3

Maximum relevant threads. Clamped to 1–10.

memory_limitintegerdefault: 5

Maximum memory search results. Clamped to 1–50.

Returns

query, threads, and memories. Each thread result contains thread, entries, open_tasks, access, and relevance (score and source). memories contains the memory service response, normally results and relations.

tools/call · params
{
  "name": "pull_context",
  "arguments": {
    "query": "Help me plan my Japan trip",
    "thread_limit": 3,
    "memory_limit": 5
  }
}
Example result
Result payload
{
  "query": "Help me plan my Japan trip",
  "threads": [
    {
      "thread": {
        "id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
        "title": "Japan trip",
        "thread_kind": "travel"
      },
      "entries": [
        {
          "id": "ee7d18ae-3e31-4661-b4ef-2d12cc765fd5",
          "entry_type": "note",
          "content": "Stay in Asakusa for the first few nights."
        }
      ],
      "open_tasks": [],
      "access": "owner",
      "relevance": {
        "score": 0.8421,
        "source": "vector"
      }
    }
  ],
  "memories": {
    "results": [],
    "relations": []
  }
}
  • Each matched thread includes up to five recent entries. Use get_thread if you need a larger window. Proposals are not included here.
  • Thread recall covers owned and shared threads. Personal memories are searched independently, even when no thread matches.
  • If thread recall is unavailable, memories can still return. If the memory service is unavailable, memories contains empty results and relations arrays.

Resolve an existing thread by its normalized title or canonical key, or create a new thread when no match exists. Owned threads take precedence over matching shared threads.

Parameters

titlestringrequired

Thread title. Required; cannot be blank. Repeated whitespace is normalized.

kindstringdefault: "topic"

Group label, such as travel or work. Normalized to lowercase with hyphens. Invalid, reserved, or uninformative labels (such as general) fall back to topic.

summarystring | nulldefault: null

Optional thread summary. May update an existing owned thread; resolving a shared thread does not replace its owner's summary.

Returns

id, title, and thread_kind for the created or reused thread. Use this id in add_thread_entry to save content.

tools/call · params
{
  "name": "create_thread",
  "arguments": {
    "title": "Japan trip",
    "kind": "travel",
    "summary": "Planning an autumn trip to Japan."
  }
}
Example result
Result payload
{
  "id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
  "title": "Japan trip",
  "thread_kind": "travel"
}
  • Creating or resolving a thread does not add a note. Call add_thread_entry separately.
  • Marked idempotent: repeated matching calls reuse the thread, though activity and owned-thread metadata or summary may change.
  • A matching shared thread may be returned instead of a new private one. Newly created threads carry source: mcp and the connected client ID.

Append an entry to an active thread you own or that is shared with you. Use it to save a decision, meeting note, or useful context from a conversation.

Parameters

thread_idstringrequired

Destination thread ID. Required; the thread must be accessible and active.

contentstringrequired

Entry content. Required; surrounding whitespace is trimmed and blank content is rejected.

titlestring | nulldefault: null

Optional short entry title.

entry_typestringdefault: "note"

Entry type label. Blank input falls back to note. This label does not create or execute a task.

Returns

id, thread_id, and entry_type for the new entry.

tools/call · params
{
  "name": "add_thread_entry",
  "arguments": {
    "thread_id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
    "content": "Stay in Asakusa for the first few nights.",
    "title": "Where to stay",
    "entry_type": "note"
  }
}
Example result
Result payload
{
  "id": "ee7d18ae-3e31-4661-b4ef-2d12cc765fd5",
  "thread_id": "0d19e8bf-6a5c-4c97-93f8-a20657e16b72",
  "entry_type": "note"
}
  • Each call appends a new entry. There is no idempotency key; repeating a successful call can create duplicate notes.
  • Entries are attributed to you and stamped with source: mcp and the client ID. Other members of a shared thread are notified as with an in-app write.
  • Writes take effect directly. Any confirmation step is controlled by your MCP client. Archived threads reject new entries with ‘Thread is archived’.

Example workflows

01

Pick up a conversation

“What did I decide about my Japan trip?”

Call pull_context with the question. If a thread needs more detail, use its ID with get_thread.

02

Save a decision

“Save our accommodation plan to my Japan trip thread.”

Find the thread with search_threads, then call add_thread_entry with its ID and the decision.

03

Start something new

“Create a home renovation thread and save these ideas.”

Call create_thread, then pass the returned id to add_thread_entry. Check the resolved thread before adding content if a matching shared thread exists.

Errors & limits

Your client displays authentication and tool errors in its own format. These are the main conditions to handle:

Sign-in required
Reconnect using OAuth. If the token does not map to a known Taim user, sign in with the account you use in the Taim app.
Thread not found
The ID does not exist or you no longer have access. Refresh the thread list and use an ID returned by the server.
Thread is archived
Archived threads do not accept new entries. Choose an active thread or manage its archive status in Taim.
Blank input
Queries, thread IDs, thread titles, and entry content must be nonempty where required. Whitespace-only values are rejected.
No search results
No matching context may exist, or semantic recall may be unavailable. Try a different query or use list_threads to browse known threads.
Memory unavailable
search_memories returns empty results and relations with an explanatory note. pull_context can still return thread context.
Limits and retries

Numeric limits are clamped to each tool’s supported range. These are result caps, not rate limits. Avoid automatically retrying add_thread_entry after an uncertain response: check the thread first so you do not save the same note twice.