דלג לתוכן מרכזי

Developer docs · Reference

Formy MCP server: endpoint, OAuth, scopes and tools

Formy runs an MCP server at https://formy.co.il/mcp. AI assistants connect to it with OAuth: the person approves the connection in Formy and chooses exactly which workspaces, forms and fields it may read. On formy.co.il the server is read-only today: assistants can list forms, read their structure and query the responses they were allowed to see, and can ask to export responses, which the person must approve in Formy.

The server accepts the assistants Formy has reviewed: Claude, ChatGPT, Cursor, VS Code with GitHub Copilot, and Claude Code. To connect one as a user, follow connecting ChatGPT and Claude. This page is the technical reference behind it.

Endpoint
https://formy.co.il/mcp, POST only
Auth
OAuth: authorization code with PKCE (S256)
Discovery
RFC 9728 and RFC 8414 metadata
Clients
Reviewed clients only; no open registration
Writes
None on formy.co.il today
Plans
Every plan, Free included
By , CTO of FormyPublished Updated

Written with AI assistance and checked against the product on . Approved for publication by Tomer Gal, CTO of Formy. How we write and approve content (Hebrew)

Endpoint and transport

  • https://formy.co.il/mcp takes JSON-RPC over HTTP POST. GET, HEAD and DELETE answer 405 with Allow: POST.
  • Send Content-Type: application/json and an Accept that allows both application/json and text/event-stream: a result comes back as JSON or as a stream scoped to that one request.
  • The server keeps no session. It issues no session ID and ignores session headers.
  • Protocol revisions: 2025-11-25 and 2025-06-18 start with initialize and then send the revision in an MCP-Protocol-Version header; 2026-07-28 needs no initialisation, and each request carries its revision and client details in params._meta.
  • Supported methods: tools/list, tools/call and ping (and initialize for the older revisions). The server offers tools only: no resources, prompts, sampling or subscriptions.
  • A browser-based client must send an Origin Formy has listed (https://claude.ai and https://chatgpt.com); any other Origin gets 403. Clients on your own machine send none.
  • A request body may be up to 256 KB.
curl -i -X POST https://formy.co.il/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}'
HTTP/2 401
www-authenticate: Bearer resource_metadata="https://formy.co.il/.well-known/oauth-protected-resource/mcp", error="invalid_token"
x-ratelimit-limit: 1000

{"error":"invalid_token"}
What production answered without a token on 17 October 2026: a pointer to the protected-resource metadata.

OAuth discovery

A client starts from the 401 above. The protected-resource metadata (RFC 9728) at https://formy.co.il/.well-known/oauth-protected-resource/mcp names the authorization server, and its metadata (RFC 8414) is at https://formy.co.il/.well-known/oauth-authorization-server. Both are public:

{
  "resource": "https://formy.co.il/mcp",
  "authorization_servers": ["https://formy.co.il"],
  "bearer_methods_supported": ["header"],
  "scopes_supported": ["mcp:use", "context.read", "workspaces.read", "…"]
}
GET https://formy.co.il/.well-known/oauth-protected-resource/mcp (scopes shortened).
{
  "issuer": "https://formy.co.il",
  "authorization_endpoint": "https://formy.co.il/mcp/oauth/authorize",
  "token_endpoint": "https://formy.co.il/mcp/oauth/token",
  "revocation_endpoint": "https://formy.co.il/mcp/oauth/revoke",
  "registration_endpoint": "https://formy.co.il/mcp/oauth/register",
  "response_types_supported": ["code"],
  "grant_types_supported": ["authorization_code", "refresh_token"],
  "token_endpoint_auth_methods_supported": ["none", "client_secret_basic", "client_secret_post"],
  "revocation_endpoint_auth_methods_supported": ["none", "client_secret_basic", "client_secret_post"],
  "code_challenge_methods_supported": ["S256"],
  "scopes_supported": ["mcp:use", "context.read", "workspaces.read", "…"],
  "authorization_response_iss_parameter_supported": true,
  "client_id_metadata_document_supported": true
}
GET https://formy.co.il/.well-known/oauth-authorization-server (scopes shortened).
  • The flow is the authorization code grant with PKCE, and S256 is the only challenge method. The authorization response carries iss (RFC 9207).
  • Refresh tokens are issued, and the revocation endpoint takes access and refresh tokens.
  • The bare /.well-known/oauth-protected-resource, without /mcp, answers 404. Use the path-specific document.

Which clients can connect

Formy does not accept arbitrary clients. A client is admitted in one of two ways, and both lead to a client profile Formy has reviewed:

  • Dynamic client registration (RFC 7591) at /mcp/oauth/register. A registration is accepted only when its application type, authentication method and every redirect URI match exactly one reviewed profile: today Claude on the web, ChatGPT, VS Code and Cursor. Any other registration is refused with invalid_redirect_uri.
  • A client ID metadata document: the client uses the URL of a metadata document its vendor publishes as its client_id. Claude Code signs in this way, and Claude and ChatGPT can too.

So you cannot connect a client you built yourself today, and assistants Formy has not reviewed, such as Gemini, Microsoft Copilot or Perplexity, are refused when they try to sign in. For your own code, use the REST API with a personal access token. The MCP server does not accept those tokens, and the REST API does not accept MCP tokens.

Scopes

The authorization server advertises 17 scopes. The consent screen shows each as a permission the person ticks, per workspace, and can narrow a connection to chosen forms and fields:

MCP scopes and what each allows
ScopeWhat it allowsOn the consent screen
mcp:useRequired on every token: use the MCP endpoint at all.Always included
context.readRead the connection's own context: who it acts for, what it was granted.קריאת הקשר החיבור והיכולות שלו
workspaces.readList the workspaces you selected and your role in each.קריאת מידע על סביבות עבודה
forms.metadata.readRead forms and their fields, without any responses.קריאת מבנה ופרטי טפסים, ללא תגובות
submissions.readRead responses. Answer values also need data.sensitive.read.קריאת הגשות של משיבים
data.sensitive.readRead answer values, only in the forms and fields you selected.קריאת מידע רגיש בגבולות שנבחרו
submissions.aggregateRead aggregate counts and summaries of responses. Advertised, but the summary tool is switched off on formy.co.il.קריאת נתוני הגשות מצטברים
integrations.readSee which integrations a form has and whether each is active, without their settings.קריאת מידע על אינטגרציות
data.exportAsk to prepare an export of responses, which you approve in Formy.ייצוא נתונים
artifacts.readRetrieve an export the connection prepared and you approved.קריאת תוצרים שנוצרו
account.readRead basic account details.קריאת פרטי החשבון
operations.readCheck the status of an operation the connection started.קריאת סטטוס פעולות מואצלות
operations.cancelCancel an operation the connection started.ביטול פעולות מואצלות
forms.drafts.writeCreate and edit drafts. Advertised, but the tools are switched off on formy.co.il.יצירה ועריכה של טיוטות טפסים
forms.publishPublish forms. Advertised, but switched off on formy.co.il.פרסום טפסים
forms.history.readRead a form's version history. Advertised, but switched off on formy.co.il.קריאת היסטוריית גרסאות של טפסים
forms.deleteMove forms to the trash. Advertised, but switched off on formy.co.il.מחיקת טפסים

Granting a scope is not enough on its own: the person's role in the workspace still applies, and reading an integration's list needs a member who may manage integrations.

Tools on formy.co.il

tools/list returns only the tools the connection's scopes allow, so two connections can see different lists. With every scope granted, formy.co.il offers these read tools:

Read tools the Formy MCP server offers
ToolScope it needsWhat it returns
formy_get_contextcontext.readWho the connection acts for and what it was granted.
formy_get_accountaccount.readBasic details of the account.
formy_list_workspacesworkspaces.readThe selected workspaces and the person's role in each.
formy_list_formsforms.metadata.readThe forms in a workspace.
formy_get_formforms.metadata.readOne form's settings, without responses.
formy_get_form_fieldsforms.metadata.readA form's fields: name, type, ID, required, hidden.
formy_list_integrationsintegrations.readWhich integrations a form has and whether each is active, without settings, addresses or credentials.
formy_query_submissionssubmissions.read, data.sensitive.readCompleted responses with the selected fields' values, filtered and sorted, a page at a time.
formy_get_submissionsubmissions.read, data.sensitive.readOne response.

Exports are approval-gated. With data.export, formy_prepare_submission_export asks to export selected completed responses as CSV, JSON or XLSX, up to 500 rows. Nothing happens until the person approves the request in Formy, with their password and a two-factor code if they use one, within 15 minutes. The file is kept for 60 minutes and only the connection that asked can fetch it, with artifacts.read, from /mcp/artifacts/{artifact}/content. With operations.read and operations.cancel, formy_get_operation, formy_get_operation_result and formy_cancel_operation follow or stop it.

Built, but switched off on formy.co.il

Creating and editing drafts, publishing and unpublishing, moving forms to the trash, response summaries, folders and version history have tools in the code, and their scopes appear in the metadata, but formy.co.il does not offer those tools yet. An assistant that asks for one gets an error. This page will say when that changes.

What a connection can read

  • Only the workspaces, forms and fields the person selected. Up to 25 workspaces per connection, and up to 100 chosen forms per workspace and 200 chosen fields per form, or all of them.
  • Answer values need both submissions.read and data.sensitive.read, and only for the selected fields.
  • Masked (secret) fields are never returned. Uploaded files and signatures come back marked as redacted, not as their content.
  • Form and field text is returned as data. The server tells assistants to treat it as untrusted, never as instructions.

Tokens and consent

MCP token and consent lifetimes
WhatHow long
Access token5 minutes; the client refreshes it
Refresh, when unused7 days
Refresh, at most30 days
The person's consent90 days
Authorization code60 seconds
Approving on the consent screen10 minutes

Each person can have up to 25 active connections. In Formy, חיבורי AI ‏(MCP) in the account settings lists them; there the person can narrow a connection, which then needs approving again, or disconnect it, which stops all future requests through it.

Limits and errors

MCP rate and size limits
LimitValue
Requests per person120 a minute
Requests per connection60 a minute
Requests per IP address, before sign-in1,000 a minute
Responses per requestUp to 50 (limit), with a cursor for the next page
Tools per tools/list page15, with a cursor for the next page
OAuth endpoints, per IPauthorize 20, token 120, register 5, revoke 30 a minute
MCP HTTP errors
StatusWhen
400Invalid JSON, a malformed JSON-RPC envelope, bad parameters, a tool the connection cannot use, or a protocol revision the server does not support.
401No token, or an expired or revoked one. Refresh, or sign in again.
403An Origin Formy has not listed.
405A method other than POST.
406, 415An Accept or Content-Type the server cannot serve.
413A body over the size limit.
429Over a rate limit.

A tool that runs but cannot do what was asked answers 200 with isError: true and a structured error, not an HTTP error.

Questions developers ask

What is the address of the Formy MCP server?

https://formy.co.il/mcp. Add it in the assistant as a remote MCP server with OAuth; no API key is needed. The assistant opens a Formy window where you sign in and choose what it may read.

Can an assistant create or edit forms through MCP?

Not on formy.co.il today. The tools for drafts, publishing and the trash exist in the code but are switched off, so an assistant can read forms and responses, and ask for an export you approve, but cannot change anything.

Can I connect my own MCP client or agent?

Not yet. Registration is open only to the clients Formy has reviewed: Claude, ChatGPT, Cursor, VS Code and Claude Code. For your own code, use the REST API with a personal access token.

Does MCP access cost extra?

No. It works on every Formy plan, Free included. What the assistant needs, such as a paid ChatGPT plan for custom MCP servers, depends on the assistant.

  • Connect ChatGPT and Claude: The steps in each assistant, for the people who connect them.
  • REST API: Personal access tokens, for your own code.
  • Webhooks: Push each response to your server instead of asking for it.

Every page of the docs is listed in Formy developer docs .

Try it on a free account

Every plan includes the API, webhooks, the embed SDK and the MCP server, Free included.

Create a free account