Fine Structure
REMOTE · FINESTRUCTURE.AI
Build and host full-stack apps from a prompt, with agents that reach you on WhatsApp and email.
Available components
Last scanned (9 hours ago)
Scores higher than 85% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Developer Tools
Recent critical change
Authorization (15 Aug 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (set_app_subdomain). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability86
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 9974 tokens (~100/item across 99 items; 99 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage95
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 85% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 100 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Nov 26 0
- Tool “schedule_agent_task” rewrote its description, which is the text the model reads security
- “schedule_agent_task” added an optional parameter “watch” cosmetic
- 20 Oct 26 0
- New tool “preview_saved_version” functional
- New tool “set_agent_owner_relay” functional
- 18 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- 15 Oct 26 0
- Tool “list_apps” rewrote its description, which is the text the model reads security
- 14 Oct 26 0
- New tool “send_agent_message”, which the server declares destructive security
- New tool “get_agent_conversation” functional
- New tool “get_agent_task” functional
- New tool “list_agent_conversations” functional
- 5 Oct 26 −1
- New tool “get_app_metadata” functional
- New tool “set_app_metadata” functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Sept 26 0
- Tool “get_app_security_context” rewrote its description, which is the text the model reads security
- Schema quality: 7782 → 9012 ▼ functional
- New tool “create_platform_request” functional
- New tool “get_platform_request” functional
- New tool “invoke_function” functional
- New tool “list_platform_requests” functional
- New tool “reply_platform_request” functional
- New tool “set_function_policy” functional
- New tool “update_platform_request” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://finestructure.ai/api/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=finestructure.ai | CN=WE1,O=Google Trust Services,C=US | 21 Oct 2026 | 19 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 3e471295b4a4af500e5677685d7aa1bf |
| SANs: finestructure.ai, *.finestructure.ai | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of finestructure.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 1814, 3799 | 8, 8 | Verified |
| finestructure.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=(), microphone=(self), geolocation=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://finestructure.ai/api/mcp | Verified | 200 | |
| http (plaintext) | http://finestructure.ai/api/mcp | HTTPS enforced | 301 | https://finestructure.ai/api/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
inspect_preview Inspect Live Preview ~88
Return server-side preview context: URLs, persisted runtime/network errors, static clickable candidates, pages, and explicit live-browser availability.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| auth_as | string | – | Optional auth simulation: anonymous |
| auth_as_role | string | – | Optional app role simulation, e.g. staff/admin/customer |
| route | string | – | Optional route to inspect |
No output schema declared.
No examples provided.
invite_app_member Invite App Member ~152
Provision a generated-app runtime member with a role. This does not create a Studio collaborator, and the owner role cannot be assigned. password is required: ask the account owner which password the member should get. This tool never generates one, because a generated password would come back in the result and that is a live credential in the conversation transcript.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| string | yes | Member email | |
| full_name | string | – | – |
| password | string | yes | The password this member signs in with, chosen by the account owner. Required, and never echoed back in the result. |
| role | string | yes | App role, e.g. admin/staff/customer |
No output schema declared.
No examples provided.
invoke_function Invoke Function ~155
Run a backend function of an owned app exactly like the HTTP route and return its status and JSON. caller='owner' runs as the app owner; caller='anonymous' first evaluates the function policy as a public visitor and returns the 401/403 decision without running when access would be denied. Use it to verify a function (secrets, outbound calls, policy) before wiring it into the app.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| caller | string | – | – |
| function | string | yes | Function name, e.g. probe |
| headers | object | – | Optional extra request headers to simulate, e.g. a webhook secret header |
| params | object | – | JSON body passed to the function |
No output schema declared.
No examples provided.
list_ab_tests List A/B Tests ~31
List the platform A/B tests configured for an app.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
list_agent_conversations List Agent Conversations ~53
List recent visible conversations belonging to one of your agents. Use get_agent_conversation to read replies and results.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | yes | Owned agent ID from list_agents. |
| limit | integer | – | – |
No output schema declared.
No examples provided.
list_agent_tasks List Agent Tasks ~75
List scheduled tasks for one agent (or the whole account), including schedule, status and next_run_at.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | Optional agent id filter |
| limit | integer | – | Max tasks to return (1-100) |
| status | string | – | Optional status filter: draft, active, paused, archived |
No output schema declared.
No examples provided.
list_agents List Agents ~42
List the AI agents on the user's account with id, name, role, status and FineMail address.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | – | Optional filter by attached app |
No output schema declared.
No examples provided.
list_app_domains List App Domains ~52
List an app's platform path, subdomain, and configured custom domain with verification, SSL, primary-domain, redirect, publish, and login-gating status.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
list_app_members List App Members ~39
List generated-app runtime users/members for an app. This is separate from Studio project collaborators.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
list_apps List Apps ~98
List owned and accepted Studio-shared applications, newest activity first. Returns up to `limit` apps per call plus the total count; page with `offset` when the account has more. Accepted editors can edit shared source; viewers can read it. Publishing, records, domains and security administration remain owner-only.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max apps to return (1-200) |
| offset | integer | – | Apps to skip, for paging |
No output schema declared.
No examples provided.
list_integrations List Integrations ~39
List supported integrations and safe connected integration metadata for an app. Tokens/secrets are never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
list_platform_requests List Platform Requests ~125
Your account's platform requests, newest activity first. Call it at the start of a session with since=<the updated_date you last saw> to learn what changed: replies, needs_info questions to answer, deployments with their commit. Filters: app_id, status.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | – | Optional app filter |
| limit | integer | – | – |
| scope | string | – | 'all' = every account (platform team only) |
| since | string | – | Optional ISO timestamp: only requests touched after it, each with changes_since |
| status | string | – | – |
No output schema declared.
No examples provided.
list_saved_versions List Saved Versions ~36
List restorable Saved Versions for an app, including versions created by MCP writes.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
list_secret_keys List Secret Keys ~34
List secret key names for an app. Secret values are never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
patch_app_file Patch App File ~116
Patch one file by replacing exact text. Safer than full overwrite for targeted edits. Creates a Saved Version before changing content. Paths follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| new_text | string | yes | Replacement text |
| old_text | string | yes | Exact existing text to replace |
| path | string | yes | Virtual file path |
| replace_all | boolean | – | Replace all matches instead of the first match |
No output schema declared.
No examples provided.
preview_saved_version Preview Saved Version ~73
Prepare an isolated read-only Saved Version preview, if enabled by the deployment. Returns compiled files for an offline sandbox, never restores files or reads live records. Never execute the returned program with host credentials. Requires app access and versions:read.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | – |
| snapshot_id | string | yes | – |
No output schema declared.
No examples provided.
publish_app Publish App ~165
Publish an app - freeze current state and make it live at a URL. Also configures whether the public URL is open, app-login gated, private, or inferred from the app.
| Name | Type | Req | Description |
|---|---|---|---|
| access_mode | string | – | Live access policy. public_open = anyone can view. public_auth = public URL opens but app login is required. private = published snapshot remains owner/collaborator-only. keep = preserve current visi… |
| app_id | string | yes | The app ID to publish |
| auth_required | boolean | – | Optional explicit override for generated-app login requirement. Prefer access_mode when possible. |
| make_public | boolean | – | Optional explicit override for whether published URLs are publicly reachable. Prefer access_mode when possible. |
No output schema declared.
No examples provided.
query_entity Query Entity ~91
Query app data records for one entity with optional exact-match filters.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name, for example Patient |
| filters | object | – | Exact-match field filters |
| limit | integer | – | Max records to return |
| offset | integer | – | Pagination offset |
| sort | string | – | Sort field, prefix with - for descending |
No output schema declared.
No examples provided.
read_app_file Read App File ~82
Read one source file from an app's virtual filesystem. Paths follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| max_chars | integer | – | Maximum content characters to return |
| path | string | yes | Virtual file path, for example pages/Home.jsx |
No output schema declared.
No examples provided.
read_app_files Read App Files ~79
Read several source files from an app's virtual filesystem. Paths follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| max_chars_per_file | integer | – | Maximum characters per file |
| paths | array | yes | Virtual file paths to read |
No output schema declared.
No examples provided.
remove_app_member Remove App Member ~39
Remove a generated-app runtime member.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| user_id | string | yes | Generated app user id |
No output schema declared.
No examples provided.
remove_custom_domain Remove Custom Domain ~59
Remove the configured custom domain from the app and clean up the platform-side hostname registration when possible.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| domain | string | – | Optional configured custom domain. If omitted, removes the current custom domain. |
No output schema declared.
No examples provided.
rename_app_file Rename App File ~115
Rename or move one app source file atomically. Internally stages an upsert at new_path and a delete at old_path, validates the resulting app state, and creates a Saved Version before applying.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| force | boolean | – | Apply even if validation reports blocking errors |
| new_path | string | yes | New virtual file path |
| old_path | string | yes | Existing virtual file path to rename |
| overwrite | boolean | – | Allow replacing an existing file at new_path |
No output schema declared.
No examples provided.
reply_platform_request Reply Platform Request ~90
Add a reply or a finding to one of your platform requests without opening a new one, e.g. to answer a needs_info question (that reopens it).
| Name | Type | Req | Description |
|---|---|---|---|
| as_team | boolean | – | Platform team only: reply as the team (mails the requester) |
| body | string | yes | The answer or finding (markdown allowed, credentials are redacted) |
| request_id | string | yes | – |
No output schema declared.
No examples provided.
restore_file_from_version Restore File From Version ~97
Restore one file from a Saved Version instead of restoring the entire app. Creates a Saved Version before changing the file. Paths follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| confirm | boolean | yes | – |
| path | string | yes | Virtual file path to restore |
| snapshot_id | string | yes | Saved Version snapshot ID |
No output schema declared.
No examples provided.
schedule_agent_task Schedule Agent Task ~437
Create a scheduled task for one of the user's agents. Supported schedule types: once (run_at ISO local time + timezone), interval (interval_minutes 5-1440), hourly, daily (time HH:MM + timezone), weekly (time + timezone + days_of_week 0=Sunday..6), cron (5-field expression + timezone), manual (only runs on demand). Returns the normalized schedule and the computed next_run_at so you can read the fire time back to the user in their timezone. For 'tell me when a new X comes in' (a lead, an order, a signup, any record of an app entity) do not poll with a plain interval: set watch, and the task costs nothing until a new record arrives.
| Name | Type | Req | Description |
|---|---|---|---|
| activate | boolean | – | Start the schedule immediately (true) or save as draft (false) |
| agent_id | string | yes | The agent id (from create_agent or list_agents) |
| instructions | string | yes | What the agent should do on each run, written as instructions to the agent |
| max_runs | integer | – | Optional cap on total runs (0 = unlimited) |
| schedule | object | yes | Schedule object, e.g. {"type":"daily","time":"08:30","timezone":"Asia/Jerusalem"} or {"type":"weekly","time":"09:00","timezone":"Asia/Jerusalem","days_of_week":[0]} or {"type":"once","run_at":"2026-0… |
| title | string | yes | Short task title |
| watch | object | – | Run the task only when a record is new, e.g. {"provider":"app_records","app_id":"<app id>","entity":"Lead"} with an interval schedule. The platform checks each interval with no model call and no cred… |
No output schema declared.
No examples provided.
seed_entity Seed Entity Records ~102
Compatibility tool for starter-record creation. Inserts directly for the authenticated app owner; by default it only seeds an empty entity (skip_if_not_empty).
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name |
| mode | string | – | append always inserts; skip_if_not_empty inserts only when the entity is empty |
| reason | string | – | Why these records should be created |
| records | array | yes | Records to insert |
No output schema declared.
No examples provided.
send_agent_message Send Agent Message ~142
Talk to an existing agent or assign it work using its normal tools, memory, permissions and team. Omit conversation_id to start a new owner conversation; supply it to continue one. Returns acceptance and a durable task_id immediately, NOT a completed answer. Poll get_agent_task and read get_agent_conversation for the actual response. Work continues after MCP disconnects. A follow-up in a busy conversation uses the normal queue. Customer conversations are readable but cannot be impersonated by this tool.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | yes | Owned agent ID from list_agents. |
| conversation_id | string | – | Conversation ID returned by these tools. |
| message | string | yes | – |
No output schema declared.
No examples provided.
set_agent_owner_relay Set Agent Owner Relay ~79
Set the owner's consent for one owned agent to relay reports from another owned agent (or all sources with '*'). Uses the same preference as the agent screen. Does not send a message or grant access to customer conversations.
| Name | Type | Req | Description |
|---|---|---|---|
| enabled | boolean | yes | – |
| receiving_agent_id | string | yes | – |
| source_agent_id | string | – | – |
No output schema declared.
No examples provided.
set_app_metadata Set App Metadata ~161
Update public HTML-shell metadata immediately, without AI, code edits, publishing or Saved Versions. Upload social_image/icon as base64 PNG/JPEG/WebP (max 5 MB, 4096px); null clears an image. Language sets HTML lang/dir and OG locale. For per-page cards, write optional seo.json and publish it; dynamic entries may read only explicitly public entity records.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | – |
| description | string | – | – |
| icon | – | – | – |
| language | string | – | BCP-47 code, e.g. he, ar, en-US |
| name | string | – | – |
| social_image | – | – | – |
| structured_data | string | – | Optional JSON-LD JSON string; empty clears it |
No output schema declared.
No examples provided.
set_app_subdomain Set App Subdomain ~171
Set or clear the app platform subdomain - the '<subdomain>.<base domain>' host Fine Structure already serves the app on. Runs the same ownership, format, reserved-name and uniqueness checks as the Studio subdomain field because it calls the same model function. Replacing a subdomain takes effect immediately and creates NO redirect: the previous name stops resolving to this app and is released for anyone to claim. Pass an empty subdomain to clear it. For a domain the user owns, use add_custom_domain instead.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| subdomain | string | yes | Subdomain label: 3-32 characters, lowercase letters, digits and hyphens, no leading or trailing hyphen, not a reserved platform name. Empty string clears the subdomain. |
No output schema declared.
No examples provided.
set_entity_policy Set Entity Policy ~142
Replace server-side entity access policy. Optional action rules override read/write roles and can allow public create without public read, update, or delete. Omitting rules replaces any existing action rules with read/write role behavior.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name, e.g. Booking |
| read | array | yes | Roles allowed to read when rules are omitted |
| rules | object | – | Nonempty unconditional action/role rules. No matching rule denies access. Include owner/admin actions explicitly. Record conditions are not supported by this MCP input. |
| write | array | yes | Roles allowed to write when rules are omitted |
No output schema declared.
No examples provided.
set_function_policy Set Function Policy ~425
Create or update the server-owned access policy of a backend function (functions/<name>.js). Without a policy a function answers only to the app owner's Studio token (401 for app visitors and webhooks). Recipes: anonymous checkout step or inbound webhook/IPN -> require_auth=false; signed-in members -> require_auth=true + allowed_roles (e.g. ['authenticated'] or ['admin','staff']); webhook with a shared secret -> require_secret=true + secret_name (an app secret) that the caller sends in secret_header. allowed_hosts fences the function's outbound network to those hosts plus the platform backend; omit it for open egress.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_hosts | array | – | Outbound egress allow-list of host[:port] entries, e.g. ['api.takbull.co.il']. Omit to keep the stored list; pass [] to open egress again |
| allowed_roles | array | – | App roles allowed when require_auth is true; 'authenticated' = any signed-in app member |
| app_id | string | yes | The app ID |
| function | string | yes | Function name, e.g. takbull_create (file functions/takbull_create.js) |
| require_auth | boolean | yes | false = anonymous visitors and external callers may invoke |
| require_secret | boolean | – | Caller must send a shared secret header (webhooks) |
| sdk_identity | string | – | Whose identity the SDK inside the function uses. 'caller' (default): the function reads data as whoever called it, so an anonymous call sees only what anonymous may read. 'app': the SDK acts as the a… |
| secret_header | string | – | Header the caller sends the shared secret in |
| secret_name | string | – | Name of the app secret holding the shared value (set_secret) |
No output schema declared.
No examples provided.
set_primary_domain Set Primary Domain ~62
Set which app host should be treated as primary for generated links and custom-domain redirects.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| domain | string | yes | Primary host, for example example.com, www.example.com, or the app subdomain host. |
No output schema declared.
No examples provided.
set_route_policy Set Route Policy ~78
Create or update a server-owned route policy for a generated app route.
| Name | Type | Req | Description |
|---|---|---|---|
| allowed_roles | array | yes | Allowed app roles |
| app_id | string | yes | The app ID |
| redirect_to | string | – | – |
| require_auth | boolean | yes | – |
| route | string | yes | Route or wildcard route, e.g. /admin/* |
No output schema declared.
No examples provided.
set_secret Set Secret ~57
Create or update one encrypted app secret. The secret value is never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| key | string | yes | Secret key name |
| value | string | yes | Secret value to encrypt and store |
No output schema declared.
No examples provided.
start_owner_phone_verification Start Owner Phone Verification ~131
Send a 6-digit code over WhatsApp to the ACCOUNT OWNER's own phone. This is the one-time ownership proof required before a platform number can be connected, and it also unlocks agents messaging the owner. Ask the user for their own WhatsApp number first and send only to that. No WhatsApp Business account is involved.
| Name | Type | Req | Description |
|---|---|---|---|
| phone | string | yes | The owner's own WhatsApp number, ideally in E.164 form such as +972501234567. |
| region | string | – | Optional ISO region hint (for example IL, US) used when the number has no country code. |
No output schema declared.
No examples provided.
update_ab_test Update A/B Test ~135
Update a native A/B test, including active state, variants, traffic, and conversion goal. Creates a Saved Version before the change.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| goal_event_filter | object | – | Optional conversion goal filter |
| goal_event_type | string | – | Optional conversion goal type |
| is_active | boolean | – | Optional active state |
| name | string | – | Optional new name |
| page_name | string | – | Optional new base route page |
| test_id | string | yes | A/B test ID |
| variants | array | – | Optional replacement variants. Traffic must total 100. |
No output schema declared.
No examples provided.
update_app Update App ~74
Update an existing application with a new prompt. The AI modifies the app based on your instructions. Creates a Saved Version before the update. Returns a job_id - poll get_job_status to track progress.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID to update |
| prompt | string | yes | What to change in the app |
No output schema declared.
No examples provided.
update_app_member_role Update App Member Role ~63
Update a generated-app runtime member role. This cannot assign owner and cannot change the Fine Structure account owner.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| role | string | yes | New role |
| user_id | string | yes | Generated app user id |
No output schema declared.
No examples provided.
update_entity_metadata Update Entity Metadata ~78
Set relationship/index metadata on an entity schema. This stores metadata in the schema file; DB index creation is automatic where supported by the platform.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name |
| indexes | array | – | – |
| metadata | object | – | – |
| relationships | array | – | – |
No output schema declared.
No examples provided.
update_entity_record Update Entity Record ~82
Compatibility tool that updates one record by ID. Executes directly for the authenticated app owner.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| data | object | yes | Fields to merge into the record |
| entity | string | yes | Entity name |
| reason | string | – | Why this record should be updated |
| record_id | string | yes | Record ID |
No output schema declared.
No examples provided.
update_entity_records Update Entity Records ~159
Update exact records. Select explicit record_ids or exact-match filters and provide shared changes, or provide per-record updates. Executes directly for the authenticated app owner; expected_count aborts the write on a mismatch.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| changes | object | – | Shared fields to merge into every selected record |
| entity | string | yes | Entity name |
| expected_count | integer | – | Required match count safety check, when known |
| filters | – | – | One exact-match selector or a list of exact-match selectors |
| reason | string | – | Why these records should be updated |
| record_ids | array | – | Exact record IDs to update |
| updates | array | – | Per-record changes; use instead of shared changes |
No output schema declared.
No examples provided.
update_entity_schema Update Entity Schema ~88
Replace or shallow-merge an existing entity schema file. Creates a Saved Version before writing.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name |
| indexes | array | – | – |
| merge | boolean | – | – |
| metadata | object | – | – |
| relationships | array | – | – |
| schema | object | yes | Schema fields to set or merge |
No output schema declared.
No examples provided.
update_platform_request Update Platform Request ~89
Platform team only: set the status of a request (open | triaged | in_progress | needs_info | deployed | wont_fix), attach the deployed commit and/or reply. deployed and needs_info mail the requester.
| Name | Type | Req | Description |
|---|---|---|---|
| deployed_commit | string | – | Commit hash or tag that shipped it |
| reply | string | – | – |
| request_id | string | yes | – |
| status | string | – | – |
No output schema declared.
No examples provided.
validate_app Validate App ~51
Run deterministic app checks: syntax, imports, routes/pages, entity schemas, missing entities, and recorded runtime errors.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| include_runtime_errors | boolean | – | – |
No output schema declared.
No examples provided.
validate_change_set Validate Change Set ~53
Validate current app files plus staged change set files before applying.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| change_set_id | string | yes | Change set ID |
| include_runtime_errors | boolean | – | – |
No output schema declared.
No examples provided.
validate_entity_relationships Validate Entity Relationships ~34
Validate entity relationship metadata and *_id references against existing entity schemas.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
write_app_file Write App File ~97
Create or replace one file in an app's virtual filesystem. Creates a Saved Version before changing content. Paths and file model follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| content | string | yes | Complete file contents |
| file_type | string | – | Optional file type override |
| path | string | yes | Virtual file path |
No output schema declared.
No examples provided.
How do I install the Fine Structure MCP server?
Fine Structure is a hosted endpoint at https://finestructure.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · finestructure.ai
claude mcp add --transport http ai-finestructure-fine-structure 'https://finestructure.ai/api/mcp'
What is the Fine Structure MCP server?
Fine Structure is an MCP server listed in the public MCP registry as ai.finestructure/fine-structure. Build and host full-stack apps from a prompt, with agents that reach you on WhatsApp and email. This page covers its hosted endpoint (https://finestructure.ai/api/mcp).
Is the Fine Structure MCP server safe to use?
Fine Structure scores 82 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Fine Structure MCP server expose?
Fine Structure exposes 99 tools: create_app, agency_create_client, agency_list_clients, agency_create_client_app, agency_create_claim_link, and 94 more. Their descriptions and schemas cost roughly 9,146 tokens of context every time the server is loaded.
Does the Fine Structure MCP server require authentication?
No. We connected to Fine Structure without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Fine Structure MCP server still maintained?
Fine Structure is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.