Endpoint and transport
https://formy.co.il/mcptakes JSON-RPC over HTTPPOST.GET,HEADandDELETEanswer405withAllow: POST.- Send
Content-Type: application/jsonand anAcceptthat allows bothapplication/jsonandtext/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-25and2025-06-18start withinitializeand then send the revision in anMCP-Protocol-Versionheader;2026-07-28needs no initialisation, and each request carries its revision and client details inparams._meta. - Supported methods:
tools/list,tools/callandping(andinitializefor the older revisions). The server offers tools only: no resources, prompts, sampling or subscriptions. - A browser-based client must send an
OriginFormy has listed (https://claude.aiandhttps://chatgpt.com); any otherOrigingets403. 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"}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", "…"]
}{
"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
}- The flow is the authorization code grant with PKCE, and
S256is the only challenge method. The authorization response carriesiss(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 withinvalid_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:
| Scope | What it allows | On the consent screen |
|---|---|---|
mcp:use | Required on every token: use the MCP endpoint at all. | Always included |
context.read | Read the connection's own context: who it acts for, what it was granted. | קריאת הקשר החיבור והיכולות שלו |
workspaces.read | List the workspaces you selected and your role in each. | קריאת מידע על סביבות עבודה |
forms.metadata.read | Read forms and their fields, without any responses. | קריאת מבנה ופרטי טפסים, ללא תגובות |
submissions.read | Read responses. Answer values also need data.sensitive.read. | קריאת הגשות של משיבים |
data.sensitive.read | Read answer values, only in the forms and fields you selected. | קריאת מידע רגיש בגבולות שנבחרו |
submissions.aggregate | Read aggregate counts and summaries of responses. Advertised, but the summary tool is switched off on formy.co.il. | קריאת נתוני הגשות מצטברים |
integrations.read | See which integrations a form has and whether each is active, without their settings. | קריאת מידע על אינטגרציות |
data.export | Ask to prepare an export of responses, which you approve in Formy. | ייצוא נתונים |
artifacts.read | Retrieve an export the connection prepared and you approved. | קריאת תוצרים שנוצרו |
account.read | Read basic account details. | קריאת פרטי החשבון |
operations.read | Check the status of an operation the connection started. | קריאת סטטוס פעולות מואצלות |
operations.cancel | Cancel an operation the connection started. | ביטול פעולות מואצלות |
forms.drafts.write | Create and edit drafts. Advertised, but the tools are switched off on formy.co.il. | יצירה ועריכה של טיוטות טפסים |
forms.publish | Publish forms. Advertised, but switched off on formy.co.il. | פרסום טפסים |
forms.history.read | Read a form's version history. Advertised, but switched off on formy.co.il. | קריאת היסטוריית גרסאות של טפסים |
forms.delete | Move 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:
| Tool | Scope it needs | What it returns |
|---|---|---|
formy_get_context | context.read | Who the connection acts for and what it was granted. |
formy_get_account | account.read | Basic details of the account. |
formy_list_workspaces | workspaces.read | The selected workspaces and the person's role in each. |
formy_list_forms | forms.metadata.read | The forms in a workspace. |
formy_get_form | forms.metadata.read | One form's settings, without responses. |
formy_get_form_fields | forms.metadata.read | A form's fields: name, type, ID, required, hidden. |
formy_list_integrations | integrations.read | Which integrations a form has and whether each is active, without settings, addresses or credentials. |
formy_query_submissions | submissions.read, data.sensitive.read | Completed responses with the selected fields' values, filtered and sorted, a page at a time. |
formy_get_submission | submissions.read, data.sensitive.read | One 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.readanddata.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
| What | How long |
|---|---|
| Access token | 5 minutes; the client refreshes it |
| Refresh, when unused | 7 days |
| Refresh, at most | 30 days |
| The person's consent | 90 days |
| Authorization code | 60 seconds |
| Approving on the consent screen | 10 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
| Limit | Value |
|---|---|
| Requests per person | 120 a minute |
| Requests per connection | 60 a minute |
| Requests per IP address, before sign-in | 1,000 a minute |
| Responses per request | Up to 50 (limit), with a cursor for the next page |
Tools per tools/list page | 15, with a cursor for the next page |
| OAuth endpoints, per IP | authorize 20, token 120, register 5, revoke 30 a minute |
| Status | When |
|---|---|
400 | Invalid JSON, a malformed JSON-RPC envelope, bad parameters, a tool the connection cannot use, or a protocol revision the server does not support. |
401 | No token, or an expired or revoked one. Refresh, or sign in again. |
403 | An Origin Formy has not listed. |
405 | A method other than POST. |
406, 415 | An Accept or Content-Type the server cannot serve. |
413 | A body over the size limit. |
429 | Over 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.
Related
- 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