Workspace memory
By default, every new connection starts cold — your assistant knows nothing about
how your team works until you tell it again. Workspace memory fixes that. It
gives the concierge (https://hdls.ai/api/mcp) a durable place to store
context, so your assistant can pick up where it left off — across sessions, and
across the whole team.
These tools live on the concierge endpoint, so they work the moment you're connected — see Getting connected if you haven't set that up yet.
💬 Just ask
- "Remember that we sell to mid-market manufacturers and always log a follow-up date."
- "What do you know about how my team works?"
You don't call these tools yourself — just tell your assistant; the technical reference below is for when you want the details.
There are two kinds of memory, and the difference matters:
- Shared — the workspace profile. One record for the entire workspace. Everyone on the team reads the same thing. "What this workspace is, how we work, conventions the assistant should follow."
- Personal — your bio and your preferences. Private to you. Other members of the same workspace cannot see your bio or preferences, even though you all share the same backend.
At a glance
| You want to… | Tool | Scope | Who can use it |
|---|---|---|---|
| Read the team's shared profile | get_workspace | shared | reader+ |
| Update the team's shared profile | set_workspace | shared | admin+ |
| Read your own bio | get_bio | personal | member+ |
| Save your own bio | set_bio | personal | member+ |
| List your own preferences | get_preferences | personal | member+ |
| Save a preference | set_preference | personal | member+ |
Mental model. A workspace is one tenant, and your credential is pinned to it — so you never pass a
tenant_id. Personal memory (your bio, your preferences) is private to you even inside a shared workspace. Shared memory (the workspace profile) is visible to everyone on the team.
Shared: the workspace profile
get_workspace returns the team-wide profile — a name, a description, and a
freeform data object. It returns null if nothing has been saved yet.
// tool: get_workspace (reader+)
{}
set_workspace saves or updates it. Because this is shared state that affects
everyone, only an admin or owner can change it. Only the fields you pass are
touched.
// tool: set_workspace (admin+)
{
"name": "Acme Sales",
"description": "B2B pipeline for the EMEA sales team.",
"data": {
"fiscal_year_start": "February",
"default_currency": "EUR",
"forecast_cadence": "weekly"
}
}
Use the profile to record the durable facts you'd otherwise repeat every session: your fiscal calendar, naming conventions, the forecast cadence, "always report in EUR" — anything you want every teammate's assistant to honour automatically.
Personal: your bio
Your bio is who you are in this workspace — stored against your credential and visible only to you. Any member (or above) can read and write their own.
// tool: set_bio (member+)
{
"content": "Alex — RevOps lead. I care about clean stage data and an honest forecast.",
"data": { "timezone": "Australia/Sydney", "focus": "EMEA enterprise deals" }
}
// tool: get_bio (member+)
{}
A bio is how the assistant remembers who it's working with on a later connect — your role, your timezone, what you focus on — without anyone else on the team seeing it.
Personal: your preferences
Preferences are simple, durable key/value settings the assistant should honour for you later — also private to you.
// tool: set_preference (member+)
{
"key": "default_report_format",
"value": "markdown_table"
}
// tool: get_preferences (member+)
{}
A few rules:
keymust be a simple identifier — letters, digits, and underscores, starting with a letter or underscore (e.g.default_report_format). Keys with spaces, dashes, or punctuation are rejected.valuemay be any JSON — a string, number, boolean, array, or object.- Setting the same key again overwrites the previous value.
Preferences are perfect for small standing instructions: a default report format, a preferred currency, "always round amounts to whole dollars."
What persists across sessions
Once written, all three slices survive disconnects and reconnects — they live in the workspace, not in the session. On a fresh connection your assistant can read them back and immediately act in context:
- The shared profile so the whole team works the same way.
- Your bio so it knows who it's helping.
- Your preferences so its output matches how you like to receive it.
That's what turns a stateless tool connection into something that remembers your business.
Gotchas worth knowing
datais replace, not merge. Forset_workspaceandset_bio, thedataobject you send fully replaces whatever was stored — it is not a deep merge. To keep existing keys, read first (get_workspace/get_bio), merge locally, then write the complete object back. (Preferences are different — eachset_preferencetouches only its one key.)- Personal stays personal. Your bio and preferences are scoped to your own credential. Another member of the same workspace — even an admin — cannot read them. The shared profile is the only slice the whole team sees.
- Shared edits need admin+. Reading the workspace profile is open to readers, but changing it requires admin or owner, because it affects everyone.
- Managed workspaces only. Workspace memory lives on hdls-managed workspaces. If your workspace points at your own bring-your-own database, the memory tools aren't available there.
Where to go next
- Set up the team that shares this context: Teams & roles.
- Pull in ready-made playbooks your preferences can shape: Skills.
- Install the products your workspace memory describes: Products.