teach-learn MCP
One profile of you that every assistant can fill in and read. Teach it once from the assistant that knows you best; every other assistant then starts already knowing you.
teach
An assistant tells it what it knows about you. Each response asks follow-up questions, so the assistant keeps going on its own. When it runs out, the questions go to you.learn
Before helping you, an assistant asks what it should know for the task. It gets a briefing, what to ask next, and what only you can answer.The server steers the conversation through its responses (next_step, status, follow-up questions), so it works in any MCP client without special setup.
Quick start
-
Get your connector URL
Use the private connector URL you were given. It ends in
/mcp/followed by a long token. Whoever runs this server can open/setup/<token>to get this page with the URL filled in. -
Connect your assistant
- Settings → Apps & Connectors → Advanced → turn on Developer mode.
- Create a connector named
teach-learnwith your URL. Authentication: None. - In a chat, enable
teach-learnfrom the tools menu.
- Settings → Connectors → Add custom connector.
- Name it
teach-learnand paste your URL. Leave the OAuth fields empty. - In a chat, enable it from the tools menu.
Run once, then start a new session:
claude mcp add teach-learn --scope user --transport http YOUR_CONNECTOR_URLAdd to
~/.cursor/mcp.json:{ "mcpServers": { "teach-learn": { "url": "YOUR_CONNECTOR_URL" } } } -
Teach it about you
Paste the teach prompt into the assistant that knows you best (usually ChatGPT). Expect several rounds of
teachcalls, then a few questions for you.
Prompts
Teach it about you
Teach from another assistant
Before a task
Make it automatic
For ChatGPT custom instructions, a Claude project's instructions, or a CLAUDE.md.
Keep it current
Tool: teach
Adds what the calling assistant knows about the user to the profile, and returns what to send next. Not read-only: it writes facts and questions.
Input
| Field | Type | Description |
|---|---|---|
content required | string | What the assistant knows about the user, in plain prose. Can cover any number of topics at once. |
answers_to | integer[] | Ids of next_questions from an earlier response that this content answers. Lets the server close them. |
Response
| Field | Type | Description |
|---|---|---|
status | string | What the assistant should do next: continue, ask_user or complete. See status. |
next_step | string | The instruction for the assistant, in words. Follow it. |
next_questions | object[] | Questions the assistant can probably answer itself: {id, topic, question}. Answer them in the next teach and pass their ids in answers_to. |
ask_user | string[] | Up to 3 questions only the user can answer, worded for them. Filled when status is ask_user. |
conflicts | object[] | New information that contradicts a stored fact: {fact_id, existing, incoming, question}. Nothing is overwritten until it's settled. |
learned | string | One line on what was taken in from this call. |
stored | integer | New facts stored by this call. |
replaced | integer | Older facts this call replaced with newer information. |
profile | string | A one-line summary: total facts and which topics are well covered. |
coverage | object | Each topic mapped to a coverage level. |
Example response
{
"learned": "Took in her role, the KYC project, team, tools and style.",
"stored": 16,
"replaced": 0,
"profile": "16 facts; well covered: work, people, tools",
"coverage": { "identity": "thin", "work": "good", "projects": "thin", "goals": "none", … },
"conflicts": [],
"next_questions": [
{ "id": 1, "topic": "projects", "question": "What are the main open risks on the KYC automation project?" },
{ "id": 2, "topic": "preferences", "question": "What tasks does she most often ask you for help with?" }
],
"ask_user": [],
"status": "continue",
"next_step": "Call `teach` again now, without waiting for the user: answer as many of next_questions as you can…"
}
Tool: learn
Answers from the profile, shaped to what the assistant is about to do. Read-only.
Input
| Field | Type | Description |
|---|---|---|
question | string | A specific question about the user. Leave empty for a general briefing. |
purpose | string | What the assistant is about to do ("draft her weekly team update"). The answer is tailored to it. |
Response
| Field | Type | Description |
|---|---|---|
answer | string | What to know for this question or purpose. It says what isn't known, and marks inferences as inferences. |
based_on | string[] | The stored facts the answer rests on. |
ask_me_next | string[] | 2–4 follow-up questions to send back to learn, all answerable from the profile. |
ask_the_user | string[] | What the profile is missing for this purpose that only the user can answer. Ask them, then teach the answers. |
next_step | string | The instruction for the assistant. |
On an empty profile, only answer and next_step come back. The next step says how to get the profile started.
Example response
{
"answer": "Maya is a senior PM at Tidewell who owns merchant onboarding… Keep it short and bulleted. Don't write compliance wording for her. Not known: this week's progress.",
"based_on": ["Senior PM at Tidewell", "Prefers short bullet answers", "…"],
"ask_me_next": ["What goes into her Thursday update to Dana?"],
"ask_the_user": ["Who receives the team update: just Omer's team, or Dana too?"],
"next_step": "If your task needs more, call `learn` again with one of ask_me_next…"
}
Definitions
status
| Value | Meaning | What the assistant does |
|---|---|---|
continue | There are follow-up questions the assistant can probably answer. | Calls teach again right away with answers, without waiting for the user. |
ask_user | The assistant has run out, but gaps remain that only the user can fill. | Asks the user the ask_user questions, then teaches their answers. |
complete | Every topic is well covered. | Stops and tells the user what it taught. |
Topics
Every fact and question belongs to one of these:
identityworkprojectspeopleexpertisetoolscommunication_stylepreferencesgoalsroutinesboundariesinterests
Fact
One durable claim about the user, in the third person ("Works at Tidewell as a senior PM"). Each fact records:
| Property | Values | Meaning |
|---|---|---|
| confidence | stated · inferred | stated: the user said or did it. inferred: the assistant's own reading of them. |
| status | active · superseded | A superseded fact was replaced by newer information. It's kept for history, but never used in answers. |
| source | assistant name | Which assistant taught it (ChatGPT, Claude Code…), taken from the MCP client's name. |
Coverage level
| Value | Meaning |
|---|---|
none | Nothing known about this topic yet. |
thin | Something is known, but not enough to act on confidently. |
good | Well enough covered that more questions add little. |
Question
A gap the server wants filled. Each question has a topic, the reason for asking, and a status:
| Status | Meaning |
|---|---|
open | Asked and waiting for an answer. The server avoids asking it again. |
answered | Answered in a later teach call. |
unanswerable | The assistant said it didn't know. If it matters, it gets reworded for the user as an ask_user question. |
Server behaviour
- Transport: MCP over Streamable HTTP, one session per connected assistant.
- First contact: an assistant connecting for the first time gets more, and broader, follow-up questions.
- Deduplication: it doesn't store a fact it already has. Newer information replaces older facts (marked
superseded). - Contradictions: raised as
conflictswith a question that would settle them. Nothing is overwritten by a guess. - Errors: if the model behind the server fails or declines, the tool returns an MCP error and stores nothing from that call.
- Restarts: sessions live in memory. After a restart, clients get a 404 and reconnect on their own, as the MCP spec expects.
Privacy & limits
- It won't store secrets, credentials, account numbers or health details, even if an assistant offers them.
- Text from assistants is treated as data about you, never as instructions to the server.
- One profile per deployment: everyone who uses the same URL shares it.
- Facts can't yet be edited or deleted from here.