NewCost control: a token allowance a month for each model choice — when one runs out, the cheaper one answers.See how it works
memtro
Reference

Tools reference

Every memtro_ tool the model and MCP clients can call, with its inputs.

Open Memtro

Every tool below is Memtro's own, available to the model in a chat, in a job, over the API and to any MCP client. Each connected system adds its own tools beside these, named <connector>_<tool>; what each connector offers is on the Connectors page, and the ones whose description starts with ACTION: change something in that system and run only when the person asked for exactly that and an administrator has granted the tool.

Three groups here come and go with a setting. The register tools appear only when the matching feature is switched on under Organisation → Features, because each one writes to shared memory. The job tools are always there. memtro_delegate exists only inside an agent-mode run, where the harness hands sub-tasks to workers.

Inputs are given as the model sees them, generated from the same schemas the API validates against.

Memory

Semantic + keyword search over the organisation/personal knowledge graph: remembered facts, decisions, preferences, people, projects and their relationships. Use before answering questions about the company, colleagues, customers or past work. Pass as_of to search memory as it stood on an earlier date (what was believed then); memtro_timeline shows how it changed.

InputTypeRequiredWhat it is
querystringyesNatural-language query
limitintegerno
as_ofstringnoISO date (YYYY-MM-DD): return what was believed at the end of that day, leaving out memories recorded or corrected since

memtro_values

Look up the recorded VALUES of things — amounts, dates, counts, rates — across entities of one kind, and compare, filter or total them. This is the tool for "which deals are worth more than £50k", "what renews this quarter", "who has the largest balance": questions memory's sentences cannot answer, because answering them from prose means reading every sentence and hoping. Call it with no key to see which values this organisation actually records. Each value is what some system or conversation stated, with the date it was recorded, and is not a live figure: check the system that owns it before acting on a number.

InputTypeRequiredWhat it is
keystringnoThe value to look up, e.g. deal_value, renewal_date, headcount. Omit to list the keys that exist.
entity_typestringnoNarrow to one kind of entity: customer, deal, person, project…
minnumbernoOnly values at or above this (numeric values only)
maxnumbernoOnly values at or below this (numeric values only)
fromstringnoISO date: only dated values on or after this
tostringnoISO date: only dated values on or before this
limitintegerno

memtro_remember

Save durable knowledge to Memtro's memory so it is available in future conversations. Use when the user states a fact, decision, preference or asks you to remember something. Choose scope: 'shared' (everyone in the organisation) for knowledge about the company, customers, systems, decisions and colleagues; 'personal' (only this user) for their own preferences, working style, private matters, reminders, or anything they say is just for them. If it corrects an earlier memory, pass replaces_memory_id.

InputTypeRequiredWhat it is
contentstringyesA self-contained statement of the fact, with names and dates.
kindone of fact, decision, preference, event, procedureno
subjectstringnoEntity the statement is mainly about
valid_fromstringnoISO date
valid_tostringnoISO date
replaces_memory_idstringno
entitiesarray of object (type, name, summary)noEach item: type; name; summary (optional).
relationsarray of object (from, to, relation)noEach item: from; to; relation.
scopeone of shared, personalnoshared = organisation knowledge, personal = about this user only. Defaults to shared when the request allows it. A request run with personal memory never stores shared facts.

memtro_explore

Look up an entity by name (fuzzy, aliases included) and return its neighbourhood in the knowledge graph plus the facts recorded about it. Pass as_of for the facts as they stood on an earlier date.

InputTypeRequiredWhat it is
namestringyesEntity name or part of it
depthintegerno
as_ofstringnoISO date (YYYY-MM-DD): the facts believed at the end of that day rather than now

memtro_why

Why a piece of code is the way it is: the pull requests and commits that touched a file, the tickets they closed, the conversations where the approach was decided, the errors and incidents that followed, and who was involved — joined across GitHub, GitLab, Sentry, the tracker, Slack and the deploy log. Use it before changing unfamiliar code, when a reviewer asks why something is written this way, when an error points at a file, or for "who should I ask about this?". Pass the file path as the repository spells it (a path from a stack trace is fine); pass repo when the same path exists in more than one repository. IMPORTANT: this is what the connected systems recorded, not the whole story — code with no pull request, no ticket and no conversation behind it will come back nearly empty, and that is an answer too. Nothing here is a judgement about whether the code is correct. When the person asks to put the reasoning on the pull request or issue, post it with github_comment: the decision, its reason in the recorded words, and what was rejected, naming Memtro as the source.

InputTypeRequiredWhat it is
pathstringnoFile path, e.g. src/checkout/total.ts (a stack-trace path such as /app/src/checkout/total.ts:42 also works)
repostringnoowner/name, when the same path exists in several repositories — or on its own to ask about a whole repository
limitintegerno
as_ofstringnoISO date (YYYY-MM-DD): the facts believed at the end of that day rather than now

memtro_timeline

How knowledge changed over time. Returns the memories recorded or superseded in a date window, oldest first, each with when it was recorded, when and by what it was replaced, and the dates it was valid for. Use it for "how did X change over the quarter", "what did we think about X before July" and "what changed since <date>". Name an entity to follow one thing; leave it out for everything that changed in the window. This is the only tool that returns superseded memories.

InputTypeRequiredWhat it is
entitystringnoEntity name (fuzzy, aliases included). Omit for the whole memory.
fromstringnoISO date: include memories recorded or superseded on or after this day
tostringnoISO date: include memories recorded by the end of this day
limitintegernoNewest entries to return (default 40)

Registers

Commitments (who promised what, by when, and whether it landed; switched on under Organisation → Features, see Commitments).

memtro_commitments

Who promised what and by when, taken from meeting notes and team chat. Use it for "what did we promise BigCo?", "what is Priya on the hook for?" and "what is overdue?". IMPORTANT: this is the record of the promise, not a live check on whether it was kept. Each verdict is a nightly judgement made from memory as it stood that night, so it can be out of date by a day or by a sync. Before telling anyone that something did or did not happen, check the system that would hold the proof with its own tools — the invoice in the ledger, the issue in the tracker, the message in the mailbox — and say which you checked. Nothing here is ever marked missed: a commitment with no evidence is still open, and the verdict says only what was looked for.

InputTypeRequiredWhat it is
ownerstringnoPerson or team name, to narrow it to what they owe
stateone of open, overdue, landed, cancelled, allnoDefault open, which includes overdue ones
limitintegerno

memtro_update_commitment

Change an entry on the commitment register: mark a promise done, mark it dropped, reopen it, or correct its wording or its due date. Pass the id from memtro_commitments. Use it as soon as someone tells you a promise was kept, abandoned or moved — otherwise the page keeps saying open, and for work that leaves no trace in a connected system it will say that forever. Marking something done or dropped needs note saying what that rests on: the system you checked and what it showed, or whose word it is. Say so in your reply too, so nobody reads a confirmation as a verified fact.

InputTypeRequiredWhat it is
idstringyesCommitment id, as memtro_commitments returns it
statusone of landed, done, cancelled, dropped, opennolanded/done = it was carried out; cancelled/dropped = it will not be, and should stop being chased; open = reopen one settled by mistake
notestringnoWhat the status rests on, in one line: the system checked and what it showed, or who confirmed it and when. Required to mark something done or dropped.
due_onstringnoISO date (YYYY-MM-DD) the deadline moved to
whatstringnoCorrected description of the promise, one line, third person, keeping any figures and names

memtro_record_commitment

Put a promise on the commitment register: a named person or team undertook to do a specific thing. Use it when someone commits during this conversation, or tells you about a commitment made somewhere Memtro cannot see (a phone call, a meeting with no notes). Promises in meeting notes and team chat are read automatically overnight, so do not copy those in by hand. Only record an actual undertaking by a named owner — an idea, a hope or a decision is not a commitment, and a register full of those is one nobody trusts.

InputTypeRequiredWhat it is
ownerstringyesThe person or team who undertook it, named as the organisation would name them
whatstringyesWhat they undertook to do, one line, third person, keeping any figures, names and systems mentioned
due_onstringnoISO date (YYYY-MM-DD) it is due. Leave out if no deadline was given — do not invent one.
promised_onstringnoISO date it was promised, if that was not today
fromstringnoWhere the promise was made, if it was not this conversation (e.g. "a call with Baltic on 9 Oct")

Contradictions (the things the business believes twice, differently; switched on under Organisation → Features, see Contradictions).

memtro_contradictions

Things this organisation believes that cannot both be true, found by reading its memory against itself overnight. Each one carries both statements with the system and date each came from. Use it for "what do we disagree with ourselves about?", "is anything we tell customers out of date?", and before answering a question where two systems might say different things. IMPORTANT: these are pairs of remembered statements, not a live check. Before telling anyone which side is right, look in the system that would settle it with its own tools and say which you checked — then record the answer with memtro_answer_contradiction so memory stops holding both.

InputTypeRequiredWhat it is
stateone of open, resolved, dismissed, allnoDefault open: the ones nobody has answered
severityone of high, medium, lownoNarrow it to how much it matters: high means somebody could act wrongly on it today
limitintegerno

memtro_answer_contradiction

Answer a contradiction: say which of the two statements stands. Pass the id from memtro_contradictions. "a" or "b" supersedes the other statement in memory, which is the whole point — a system told which of two beliefs is wrong and keeping both has learned nothing. "both" leaves both standing (they describe different periods or different parts of the business) and "neither" says they never disagreed; both close the question without touching memory. Answer only from something you checked or something somebody told you in this conversation, never from your own inference, and say in your reply what the answer rests on.

InputTypeRequiredWhat it is
idstringyesContradiction id, as memtro_contradictions returns it
answerone of a, b, both, neitheryesa/b = that statement stands and the other is superseded; both = both true; neither = not a contradiction
notestringyesWhat the answer rests on, in one line: the system you checked and what it showed, or who said so and when

memtro_raise_contradiction

Raise a contradiction nobody had noticed: two things the organisation believes that cannot both be true. Use it when you find one while answering something else — two systems disagreeing about the same customer, a public claim that no longer matches the records — or when somebody points one out. Pairs of remembered statements are found automatically overnight, so do not copy those in. Give the memory ids where you have them (memtro_search returns them), because that is what lets the answer supersede the statement that loses.

InputTypeRequiredWhat it is
questionstringyesOne sentence stating both sides and asking which is right, as a colleague would ask it
aboutstringyesWhat the disagreement is about, three to six words
claim_astringyesThe first statement, as it is believed
source_astringyesWhere the first came from: a system name, a document, or who said it
claim_bstringyesThe second statement
source_bstringyesWhere the second came from
memory_id_astringnoThe memory behind the first statement, if you have it
memory_id_bstringnoThe memory behind the second statement, if you have it
severityone of high, medium, lownohigh = somebody could act wrongly on it today (a customer-facing claim, a price, a contract term); default medium
subjectstringnoThe person, company or thing both statements are about

Jargon (the words the business uses in its own way; switched on under Organisation → Features, see Jargon).

memtro_glossary

Words this organisation uses in its own way — acronyms, process names, ordinary words used as terms of art — with a note on what each one points at here. Look a word up BEFORE answering a question that turns on it, so you do not read it in its ordinary sense. Each note is a POINTER, not a definition: it was written from a handful of uses and the term almost always reaches further, so never use one to narrow what somebody means, to tell them they are using their own word wrongly, or to rule something out because the note did not mention it. Where the answer turns on the edge of a meaning, look at how the word is actually used (memtro_search) and say what you found. Also use this to see which words are still waiting for somebody to say what they point at, and which are used in more than one sense.

InputTypeRequiredWhat it is
termstringnoOne word or phrase to look up; leave out for the whole glossary
stateone of defined, open, allnoDefault defined: the ones somebody has confirmed. open = raised and still unanswered.
limitintegerno

memtro_define_term

Record what one of this organisation's words points at, in its own terms. Use it when somebody explains a word in the conversation ("a MID is the acquirer's merchant identifier"), or confirms what one of the open entries is getting at. It becomes a memory and joins the glossary, so later answers stop reading the word in its ordinary sense. Write it as a pointer and keep it broad enough to be true of every use you have seen — a note that is too narrow will be read as the whole meaning. Only record what somebody actually said: a definition you inferred is a guess, and a glossary of guesses is worse than none.

InputTypeRequiredWhat it is
termstringyesThe word or phrase, written as the organisation writes it
definitionstringyesWhat the word points at here, in one sentence, broad enough to cover every use you have seen
idstringnoThe glossary id from memtro_glossary, where this answers an entry already raised

memtro_update_term

Change a glossary entry: correct or widen what a word points at here, take it out of the glossary, or put it back to be asked about again. Widening one is as useful as correcting it — somebody finding that the note was narrower than the word is exactly the thing worth recording. Pass the id from memtro_glossary. Use it the moment somebody corrects a definition in the conversation — a glossary that is wrong is worse than one that is empty, because every later answer reads the word that way. A corrected definition replaces the one it corrects in memory; withdrawing one removes the statement entirely, since a meaning nobody stands behind should not be retrievable. Only ever record what somebody actually said.

InputTypeRequiredWhat it is
idstringyesGlossary id, as memtro_glossary returns it
definitionstringnoWhat the word points at, corrected or widened, in one sentence
stateone of defined, dismissed, opennodismissed = not this organisation's word after all, and never raised again; open = withdraw the definition and ask again; defined is implied by passing a definition
notestringnoWhy, in one line, for whoever reads the entry later

Jobs

memtro_schedule_once

Schedule a ONE-OFF task at a single future moment: "remind me in a week to…", "on Friday afternoon check whether X landed", "chase this in two days". It runs once, reports into a chat like any job, and then deletes itself — nothing is left behind. Use this rather than memtro_schedule_job whenever the user means once. Work out the moment from today's date in your instructions and pass it as an ISO date and time. Write the prompt as complete instructions to a future assistant with no memory of this conversation, including what the user is expecting to be reminded of. Default timezone: UTC. Confirm the moment back in words.

InputTypeRequiredWhat it is
namestringyesShort name, e.g. 'Chase the Baltic invoice'
promptstringyesWhat to do on the day, with the names, systems and context a reader with no memory of this conversation would need
atstringyesWhen to run it, as an ISO date and time (e.g. 2026-10-19T09:00) in the timezone below. A date on its own means 09:00 that day.
timezonestringnoIANA timezone the moment is in (default UTC)
scopeone of personal, sharednoshared = visible to and manageable by the organisation (still runs as this user); default personal
modeone of chat, agentnoagent (multi-step, default) or chat (single reply)
modelstringnoModel id or 'auto' (default)
memoryone of org, personal, offnoWhere facts learned during the run are stored; defaults to the scope

memtro_schedule_job

Create a scheduled job: a task the assistant will carry out on a cron schedule with the same tools, as this user, saving each run's report to a chat. Use when the user asks for something recurring or at a future time ("every morning…", "each Friday…", "check X daily"). Write the prompt as complete instructions to a future assistant that has no memory of this conversation. Five-field cron: minute hour day-of-month month day-of-week, e.g. "0 9 * * 1-5" (weekdays 09:00), "0 * * * *" (hourly), "30 17 * * 5" (Fridays 17:30), "0 9 1 * *" (1st of the month). Default timezone: UTC. Confirm the schedule back to the user in words.

InputTypeRequiredWhat it is
namestringyesShort name, e.g. 'Daily VIP ticket digest'
promptstringyesWhat to do on every run, with names, systems, filters and what the report should contain
schedulestringyesFive-field cron expression
timezonestringnoIANA timezone the schedule is in (default UTC)
scopeone of personal, sharednoshared = visible to and manageable by the organisation (still runs as this user); default personal
modeone of chat, agentnoagent (multi-step, default) or chat (single reply)
modelstringnoModel id or 'auto' (default)
memoryone of org, personal, offnoWhere facts learned during runs are stored; defaults to the scope

memtro_list_jobs

List this user's scheduled jobs and the organisation's shared ones, with schedules, next/last run and status.

No inputs.

memtro_update_job

Change, pause, resume, run now or delete a scheduled job (by id from memtro_list_jobs). Five-field cron: minute hour day-of-month month day-of-week, e.g. "0 9 * * 1-5" (weekdays 09:00), "0 * * * *" (hourly), "30 17 * * 5" (Fridays 17:30), "0 9 1 * *" (1st of the month).

InputTypeRequiredWhat it is
idstringyes
namestringno
promptstringno
schedulestringno
timezonestringno
enabledbooleannofalse pauses the job, true resumes it
modeone of chat, agentno
modelstringno
memoryone of org, personal, offno
run_nowbooleannoQueue a run within the next minute, in addition to the schedule
deletebooleannoDelete the job (its past runs stay in its chat)

Agent mode

memtro_delegate

Delegate a self-contained sub-task to a worker agent that has the same tools. Returns the worker's final report. Use for parallelisable research or for long multi-step lookups that would clutter your own context.

Agent mode only.

InputTypeRequiredWhat it is
taskstringyesComplete instructions for the worker, including names, ids, date ranges and what to return
contextstringnoAny facts from this conversation the worker needs