MCP
Thirty-seven tools for your agent
Edge functions
One bundled module on its own subdomain, holding a secret key minted at deployment that never comes back — not to you, and not to the agent that wrote the code.
export default {
async fetch(request, env) {
const res = await fetch(`${env.MANYBASES_URL}/tables/checkins/rows?limit=200`, {
headers: { Authorization: `Bearer ${env.MANYBASES_SECRET_KEY}` },
});
const { data, error } = await res.json();
if (error) return Response.json({ error }, { status: res.status });
return Response.json({ count: data.length });
},
};Both variables are injected at deployment. The secret key is the function’s own — minted when it ships, written into the script, and returned to nobody.
It has no direct handle on the database or the file store either: everything it reads travels over HTTP to its project’s API and passes through every check any other request passes through.
1 MB a module · 10 000 ms of CPU · 100 subrequests · not capped in number
Secrets are set once per project, from the dashboard, by a signed-in human. Every function of the project receives them within seconds — including the ones deployed later — and they survive redeployments.
Values are encrypted at rest, bound to the project and the name, so a value copied elsewhere does not decrypt. No route ever returns one. A human can read a digest, which is enough to check a paste and not enough to be a leak.
The agent sees the names. Never the values.
Execution output is not captured — not console.log, not a CPU overrun. What is captured is every request the function made to its project’s API.
No scheduled tasks and no incoming webhooks. A function answers a request; nothing wakes it up on a timer.
Nothing is uploaded from the dashboard. Your agent bundles the module and deploys it; the dashboard lists what it deployed.
Thirty-seven tools for your agent
Sign-up, sessions, eight presets
Push to GitHub, and it is live
Give it a backend.