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

  1. 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.
  2. Connect your assistant
    1. Settings → Apps & Connectors → Advanced → turn on Developer mode.
    2. Create a connector named teach-learn with your URL. Authentication: None.
    3. In a chat, enable teach-learn from the tools menu.
    1. Settings → Connectors → Add custom connector.
    2. Name it teach-learn and paste your URL. Leave the OAuth fields empty.
    3. 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_URL

    Add to ~/.cursor/mcp.json:

    { "mcpServers": { "teach-learn": { "url": "YOUR_CONNECTOR_URL" } } }
  3. Teach it about you Paste the teach prompt into the assistant that knows you best (usually ChatGPT). Expect several rounds of teach calls, then a few questions for you.

Prompts

Teach it about you

Use the teach-learn tool. Teach it everything you know about me, from your memory and our past conversations: who I am, my work, my projects, the people I work with, my preferences, and how I like to communicate. Call teach, then follow each response's next_step: answer its follow-up questions yourself whenever you can, and only ask me the ones you can't. Keep going until its status is "complete", then tell me what you taught it.

Teach from another assistant

Use the teach-learn tool. Call learn first to see what it already knows about me, then teach it anything you know that's missing or out of date. Follow each response's next_step until its status is "complete".

Before a task

Before you start, call learn on the teach-learn tool with purpose set to what I'm asking for. Use what it tells you, follow its ask_me_next suggestions if you need more, and ask me its ask_the_user questions only if they matter for this task. Teach back anything new I tell you.

Make it automatic

For ChatGPT custom instructions, a Claude project's instructions, or a CLAUDE.md.

You have a teach-learn tool that holds my profile. At the start of any task about me or my work, call learn with the task as the purpose before answering. Whenever you learn something durable about me (a new project, a preference, a change in role), call teach with it.

Keep it current

Teach the teach-learn tool what's changed:

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

FieldTypeDescription
content requiredstringWhat the assistant knows about the user, in plain prose. Can cover any number of topics at once.
answers_tointeger[]Ids of next_questions from an earlier response that this content answers. Lets the server close them.

Response

FieldTypeDescription
statusstringWhat the assistant should do next: continue, ask_user or complete. See status.
next_stepstringThe instruction for the assistant, in words. Follow it.
next_questionsobject[]Questions the assistant can probably answer itself: {id, topic, question}. Answer them in the next teach and pass their ids in answers_to.
ask_userstring[]Up to 3 questions only the user can answer, worded for them. Filled when status is ask_user.
conflictsobject[]New information that contradicts a stored fact: {fact_id, existing, incoming, question}. Nothing is overwritten until it's settled.
learnedstringOne line on what was taken in from this call.
storedintegerNew facts stored by this call.
replacedintegerOlder facts this call replaced with newer information.
profilestringA one-line summary: total facts and which topics are well covered.
coverageobjectEach 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

FieldTypeDescription
questionstringA specific question about the user. Leave empty for a general briefing.
purposestringWhat the assistant is about to do ("draft her weekly team update"). The answer is tailored to it.

Response

FieldTypeDescription
answerstringWhat to know for this question or purpose. It says what isn't known, and marks inferences as inferences.
based_onstring[]The stored facts the answer rests on.
ask_me_nextstring[]2–4 follow-up questions to send back to learn, all answerable from the profile.
ask_the_userstring[]What the profile is missing for this purpose that only the user can answer. Ask them, then teach the answers.
next_stepstringThe 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

ValueMeaningWhat the assistant does
continueThere are follow-up questions the assistant can probably answer.Calls teach again right away with answers, without waiting for the user.
ask_userThe assistant has run out, but gaps remain that only the user can fill.Asks the user the ask_user questions, then teaches their answers.
completeEvery 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:

PropertyValuesMeaning
confidencestated · inferredstated: the user said or did it. inferred: the assistant's own reading of them.
statusactive · supersededA superseded fact was replaced by newer information. It's kept for history, but never used in answers.
sourceassistant nameWhich assistant taught it (ChatGPT, Claude Code…), taken from the MCP client's name.

Coverage level

ValueMeaning
noneNothing known about this topic yet.
thinSomething is known, but not enough to act on confidently.
goodWell 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:

StatusMeaning
openAsked and waiting for an answer. The server avoids asking it again.
answeredAnswered in a later teach call.
unanswerableThe assistant said it didn't know. If it matters, it gets reworded for the user as an ask_user question.

Server behaviour

Privacy & limits

The URL is the password. Anyone who has it can read and change the profile. Don't paste it into shared docs or chats.