Your AI client drafts. You publish.
Describe a form in Claude Code, Claude Desktop, Codex, or Cursor and it appears in your workspace as a valid draft, ready to preview. The client signs in through your browser, holds no more permission than you do, and has no publish tool, so a live campaign is never one prompt away from changing.
Connecting takes one approval in your browser
No token to copy, nothing to paste into a config file. The client asks, you approve, it works.
- 01
The client registers
It calls the OAuth registration endpoint and asks for the permissions it wants, at most forms read and write by default.
- 02
Your browser opens
You sign in to HostMyForms if needed, see exactly what the client is asking for, and untick anything you do not want to grant.
- 03
You approve
Approval mints an ordinary workspace API token, capped by your role. Nothing is copied or pasted.
- 04
It works on drafts
Every call names its form and carries the revision it read, so two conversations never overwrite each other.
What the agent can do
Twelve tools, all against drafts and lookups. Each needs a permission you granted.
Read
whoami- Which account and workspace it acts for, and what it may do.
list_forms- Find forms by name, active or archived.
get_form- One form: draft configuration, revision, and outstanding issues.
preview_form- A text outline, a self-contained HTML page, and an inline view for MCP Apps hosts.
Write
validate_form_config- Check a configuration with the backend's validator without saving.
create_form- Create a form. A configuration with issues is refused and nothing is stored.
update_form- Change a draft, guarded by the revision it read.
duplicate_form- Copy a draft into a new form to build a variant.
Manage and look up
archive_form- Hide a form from the active list. Needs a separate permission.
restore_form- Bring an archived form back.
list_master_data_types- The option lists the workspace can reference, such as states or education levels.
search_master_data_options- Entries of a list, with the source to put in a field.
What it cannot do, by construction
These are properties of where the code runs, not promises in a policy.
Drafts only
There is no publish tool. A campaign publishes a frozen version, and no MCP tool reaches campaigns.
Strict saves
create_form and update_form refuse a configuration with issues, one entry per problem, so a saved form always opens in the playground.
Never more than you
The token's permissions are intersected with your live role on every request. Demote or remove the member and the agent stops.
One workspace
The workspace comes from the token. No tool input carries a workspace or owner id, so there is nothing to escalate through.
No silent overwrites
A stale revision is refused with 412. The agent re-reads and reapplies instead of clobbering an edit it did not see.
Same rules as the app
The schema resource the server publishes is the same document the backend enforces, copied at build time and guarded by a test.
Connect your client
Add the endpoint, then approve the request when your browser opens.
Claude Code
claude mcp add --transport http hostmyforms https://api.hostmyforms.com/mcpThen run /mcp in a session, pick hostmyforms, and choose Authenticate.
Codex
codex mcp add hostmyforms --url https://api.hostmyforms.com/mcp
codex mcp login hostmyformslogin opens your browser. Approve the request there.
Claude Desktop, Cursor, and others
{
"mcpServers": {
"hostmyforms": {
"type": "http",
"url": "https://api.hostmyforms.com/mcp"
}
}
}Clients that only take commands can bridge with npx mcp-remote and the same URL.
Then ask for what the form should collect, not for JSON
- Use hostmyforms to draft a customer feedback form: a 1 to 5 star rating, what went well, what to improve, and an optional email.
- Work on my Customer Feedback draft. Add a section about support experience with a satisfaction choice and a comments box.
- Read the hostmyforms form schema and tell me whether my draft can be published yet.
Where hosted access stands
The MCP endpoint, the OAuth flow, and the consent screen are built and tested. Serving them at api.hostmyforms.com over HTTPS, with a public issuer and a client registration policy, is the remaining work. Until then the endpoint runs against a workspace on your own machine, and the snippets above show the address it will have.
Questions people ask
Can the agent publish a form or change a live campaign?
No. Publishing belongs to campaigns, and there is no MCP tool for campaigns. Editing a draft never changes the frozen version a live campaign serves.
What permissions does the agent get?
Whatever you tick on the consent screen, capped by your own role. By default that is forms.read and forms.write. Archiving is offered only if the client asks for it.
How do I disconnect a client?
A connection is a workspace API token. Revoke it through the API, or leave the workspace, and the client stops on its next request.
Can I use it without a browser?
Yes. Mint a workspace API token by hand and send it as a bearer token, or run the stdio binary for clients that cannot speak HTTP.
Which clients work?
Anything that speaks MCP over HTTP with OAuth: Claude Code, Claude Desktop, Codex, Cursor, and others. Hosts that support MCP Apps also get the inline form preview.
Draft with your assistant, publish yourself
Create a workspace, connect your client, and keep publishing a human decision.