For developers running agents, workflows and scheduled jobs

Change the setting, not the code

OpenPrefs is central config for your agents, workflows and jobs. Flip a toggle or edit a value on the dashboard, and each one reads it at the start of its next run, over MCP or REST. Every change is logged with who made it, and one tap puts it back.

MCP serverhttps://mcp.openprefs.ai

Free to sign up. Streamable HTTP, with OAuth 2.1 or a bearer token.

Works withClauden8nChatGPTMuseGrok BotAny MCP appScripts and cron jobs, over REST
How it works

Flip a toggle. The next run stops.

Say you have an agent that pings your website. One day you want it off. Turn off its toggle on the dashboard, and the next time it runs, it reads the setting and stops. No redeploy, no code change.

1

Give it settings

Create its settings on the dashboard, such as an on/off toggle and a check interval, or let the agent create its own with define_preference in a space it can write to. Each one is typed: a toggle is on or off, an interval is a number.

2

Read them at the start of each run

First thing every run, the agent calls get_preferences for its keys. If the toggle is off, it stops. If not, it uses the values it just read.

3

Change them on the dashboard

Edit a value in OpenPrefs whenever you like. Nothing is pushed to the agent: it picks up the new value the next time it runs and reads.

The read-at-start pattern

Over MCP, the agent calls get_preferences with the keys it needs, up to 20 at once. Over REST, the same tool is a POST to https://api.openprefs.ai/agent/v1/get_preferences.

Each value comes back typed: true or false for a toggle, a number for a number. Decide what your job does if it can’t reach its config, such as skipping the run.

If a setting is set to ask before reading, its value is held back until you approve, and the response says so in a pending field.

MCP tool call
get_preferences({
  "keys": [
    "uptime.enabled",
    "uptime.check_interval_minutes",
    "uptime.alert_channel",
    "uptime.alert_hours"
  ]
})
Python, over REST
import os, requests

r = requests.post(
    "https://api.openprefs.ai/agent/v1/get_preferences",
    headers={"Authorization": f"Bearer {os.environ['OPENPREFS_TOKEN']}"},
    json={"keys": ["uptime.enabled", "uptime.check_interval_minutes"]},
    timeout=10,
)
r.raise_for_status()
prefs = {p["key"]: p.get("value") for p in r.json()["preferences"]}

if not prefs.get("uptime.enabled"):
    print("Uptime ping is off in OpenPrefs. Skipping this run.")
    raise SystemExit(0)

interval = prefs["uptime.check_interval_minutes"]
Typed settings

A toggle is on or off. An interval is a number.

Every value is checked against its type, so a job never has to parse a note to find out what to do.

Toggleuptime.enabled

Uptime ping enabled

On

Turn it off, and the next run reads false and skips.

Numberuptime.check_interval_minutes

Check interval

5 minutes
Choiceuptime.alert_channel

Alert channel

EmailText messageSlack
Time ruleuptime.alert_hours

When to send alerts

Agents may send alerts only between 9:00 AM and 6:00 PM, on Mon, Tue, Wed, Thu, Fri.

A time rule carries whether it’s on, its days and its window. Your job checks the window when it runs.

Listreports.nightly_recipients

Nightly report recipients

ops@example.comdana@example.comalerts@example.com
Numbercontent.max_posts_per_day

Content agent: max posts per day

3 posts/day
TypesToggleNumberChoiceTextListList with detailsTime rule
Dashboard

See which agent changed what

Configure your agents, workflows and jobs from one dashboard. Each one gets only the access you give it, and every read and change shows up in the log.

  • Access per agent, by spaceA new agent starts with no access. Give the uptime ping the space with its settings and nothing else.
  • Six permission levelsFrom read only to read and write, set per space, with exceptions for single settings.
  • Every read and change loggedActivity shows which agent did what, and why, so you can see when a job last read its config.
  • One-tap undoAny change can be put back.
  • Ask firstA change an agent wants to make can wait for your OK.

Permission levels

Read & writeRead onlyAsk before writingAsk before readingAsk before reading or writingNo access

Activity

Uptime ping Read Uptime ping enabled, Check interval3 min ago
Content agent Set Max posts per day from 3 to 240 min ago · “Holiday week, slowing down”Undo
Nightly report Read Nightly report recipients9 h ago
Content agent wants to set Max posts per day
2→6
Reason: “Product launch on Thursday” · 15 min ago
DeclineApprove
Connect

One address. Pick your client.

Apps that sign in to a connector use OAuth. Scripts, cron jobs and apps configured with a file use a token you create in OpenPrefs.

Claude Code

One command, with a token made for Claude Code.

  1. In OpenPrefs, open Agents, select Connect an agent, then Create new token. Name it Claude Code.
  2. Pick the spaces it can use, and whether it can only read them or also make changes.
  3. Copy the token. It’s shown only once, so treat it like a password.
  4. Run the command with your token in place of YOUR_TOKEN. The token dialog also shows it with your token filled in.
  5. Start Claude Code and run /mcp to check that OpenPrefs is connected.
claude mcp add --transport http openprefs https://mcp.openprefs.ai --header "Authorization: Bearer YOUR_TOKEN"
What your agent gets

Ten tools, in plain words.

The same tools over MCP and REST. Every call reaches only the spaces you gave that agent.

Read 4 tools

Check the config before the run starts.

search_preferencesFind a setting by words, even with typos. Handy when the agent doesn’t know the exact key.
get_preferencesRead up to 20 settings by exact key. The call to make at the start of each run.
list_itemsRead a list in order, one page at a time, like a report’s recipients.
list_containsCheck which labels a list holds, like whether an address is already a recipient.

Write 6 tools

Let an agent set up or adjust its own config, with a reason you can see.

set_preferencesSet up to 20 values at once. Each is checked against its type.
define_preferenceCreate a new setting from code, with no restart, in a space the agent can write to.
add_list_itemsAdd to a list. Items already there are reported, not added twice.
update_list_itemsRename an item or change its details.
remove_list_itemsRemove items from a list by label.
delete_preferenceDelete a setting you no longer need.

Every change carries a one-sentence reason, so the log shows why a value changed.

Your first switch

Create it, read it, flip it.

Connect one agent, give it one setting, and turn it off from the dashboard to see the whole loop.

1

Create the switch

In OpenPrefs, select New preference. Make a toggle named Enabled in a new space called Uptime, and turn it on. Its key is uptime.enabled.

2

Connect your agent

Pick your client in Connect above, and give the agent access to the Uptime space only. Read only is enough to read the switch.

3

Read it, then flip it

Have your agent read uptime.enabled at the start of its run: it gets true. Turn it off in OpenPrefs, and the next run reads false and skips. The read and your change both show in Activity, with undo.

FAQ

Is it free?
Yes, with standard rate limits to prevent abuse. It’s built for your own agents and jobs, not for one account serving many users at scale.
Does OpenPrefs push changes to my agent?
No. Your agent reads its settings when it runs, so a change takes effect on its next run. A long-running agent can read again between steps.
What if a run is already going when I change a setting?
That run keeps the values it already read. The next read gets the new value.
How is this different from env vars or a config file?
Changing an env var or a config file usually means editing code or redeploying. In OpenPrefs you change the value on the dashboard, it’s checked against its type, and the change is logged with an undo. Your agent reads it on its next run.
Can one token serve many users?
No. Each token or OAuth grant belongs to one user. Give each agent or job its own token, so its access and activity stay separate.
What’s the MCP server address?
https://mcp.openprefs.ai, at the root, with no /mcp path. It uses Streamable HTTP.
OAuth or a token?
Apps that can sign in to a connector use OAuth 2.1 with PKCE. Dynamic client registration and client ID metadata documents are supported, so you don’t need to register a client first. Cron jobs, scripts, config-file apps and REST calls use a token you create in OpenPrefs. It’s shown once, so treat it like a password.
Is the REST API the same as the MCP server?
Yes. The same 10 tools, described in a public OpenAPI spec. Each tool is a POST to https://api.openprefs.ai/agent/v1/<tool>.
What can each agent see?
Only the spaces you gave it. Every call acts as the agent its token or OAuth grant belongs to, held to the access you set. If a setting is set to ask before reading, the value is held back until you approve.
What happens if I change or revoke an agent’s access?
Its next call reaches only what’s still allowed, and a revoked token is refused. Decide what your job does when it can’t read its config, such as skipping the run.

Settings your agents check before they run.

Change the setting, not the code.