Skip to content

Fine Structure

by finestructure.ai · remote · no sign-in to list tools · v1.0.2 · published by ai.finestructure

Build and host full-stack apps from a prompt, with agents that reach you on WhatsApp and email.

Deletes · 18Final · 3Changes · 34

99 tools: 18 can delete or cancel things, 3 do something that can't be undone, 34 change things and 44 only read.

Scanned Oct 21, 2026

5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http fine-structure https://finestructure.ai/api/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn4 info
  • The server marks "validate_app" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "validate_app" says "validate": a word for reading.

    What this check looks for
  • The description mentions "Credential".

    Matched text

    description: "...nd how the team will know it is closed. Credential-looking values are redacted. Returns re..."

    What this check looks for
  • The input schema at properties.body.description mentions "credentials".

    Matched text

    inputSchema.properties.body.description: "...he answer or finding (markdown allowed, credentials are redacted)"

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...e back in the result and that is a live credential in the conversation transcript."

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...execute the returned program with host credentials. Requires app access and versions:read."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

99 tools

Deletes or cancels 18Claude Code: deny
  • add_custom_domainAttach or replace the app custom domain through the same Fine Structure Studio custom-domain flow.No findings

    Why it is in this group

    • The name "add_custom_domain" says "add": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Attach or replace the app custom domain through the same Fine Structure Studio custom-domain flow. Returns exact DNS verification and routing records for the user to configure at their DNS provider.

    Annotations the server declares

    • title: Add Custom Domain
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • delete_ab_testDelete a native A/B test from an app.No findings

    Why it is in this group

    • The name "delete_ab_test" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete a native A/B test from an app. Creates a Saved Version before the change.

    Annotations the server declares

    • title: Delete A/B Test
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • delete_entity_recordsDelete exact records by ID or exact-match filters.No findings

    Why it is in this group

    • The name "delete_entity_records" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete exact records by ID or exact-match filters. Executes directly for the authenticated app owner; pass expected_count as a safety check to abort on a mismatch.

    Annotations the server declares

    • title: Delete Entity Records
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • delete_secretDelete one app secret by key.No findings

    Why it is in this group

    • The name "delete_secret" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete one app secret by key.

    Annotations the server declares

    • title: Delete Secret
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • detach_agent_whatsappDisconnect the owner's WhatsApp route from a platform number.No findings

    Why it is in this group

    • The name "detach_agent_whatsapp" says "detach": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Disconnect the owner's WhatsApp route from a platform number. Removes only this account's route; other accounts sharing the number keep theirs.

    Annotations the server declares

    • title: Detach Agent Whatsapp
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • discard_change_setDiscard a pending staged change set without changing app files.No findings

    Why it is in this group

    • The name "discard_change_set" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Discard a pending staged change set without changing app files.

    Annotations the server declares

    • title: Discard Change Set
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • remove_app_memberRemove a generated-app runtime member.No findings

    Why it is in this group

    • The name "remove_app_member" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove a generated-app runtime member.

    Annotations the server declares

    • title: Remove App Member
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • remove_custom_domainRemove the configured custom domain from the app and clean up the platform-side hostname registration when possible.No findings

    Why it is in this group

    • The name "remove_custom_domain" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove the configured custom domain from the app and clean up the platform-side hostname registration when possible.

    Annotations the server declares

    • title: Remove Custom Domain
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • restore_file_from_versionRestore one file from a Saved Version instead of restoring the entire app.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Restore File From Version
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • send_agent_messageTalk to an existing agent or assign it work using its normal tools, memory, permissions and team.No findings

    Why it is in this group

    • The name "send_agent_message" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Send Agent Message
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • set_app_subdomainSet or clear the app platform subdomain - the '<subdomain>.<base domain>' host Fine Structure already serves the app on.No findings

    Why it is in this group

    • The name "set_app_subdomain" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set App Subdomain
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • set_entity_policyReplace server-side entity access policy.No findings

    Why it is in this group

    • The name "set_entity_policy" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set Entity Policy
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • set_route_policyCreate or update a server-owned route policy for a generated app route.No findings

    Why it is in this group

    • The name "set_route_policy" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create or update a server-owned route policy for a generated app route.

    Annotations the server declares

    • title: Set Route Policy
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • set_secretCreate or update one encrypted app secret.No findings

    Why it is in this group

    • The name "set_secret" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create or update one encrypted app secret. The secret value is never returned.

    Annotations the server declares

    • title: Set Secret
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • start_owner_phone_verificationSend a 6-digit code over WhatsApp to the ACCOUNT OWNER's own phone.No findings

    Why it is in this group

    • The name "start_owner_phone_verification" says "start": a word for a change.
    • The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Start Owner Phone Verification
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • update_app_member_roleUpdate a generated-app runtime member role.No findings

    Why it is in this group

    • The name "update_app_member_role" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update a generated-app runtime member role. This cannot assign owner and cannot change the Fine Structure account owner.

    Annotations the server declares

    • title: Update App Member Role
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • update_entity_recordCompatibility tool that updates one record by ID.No findings

    Why it is in this group

    • The name "update_entity_record" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Compatibility tool that updates one record by ID. Executes directly for the authenticated app owner.

    Annotations the server declares

    • title: Update Entity Record
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
  • update_entity_recordsUpdate exact records.No findings

    Why it is in this group

    • The name "update_entity_records" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Update Entity Records
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
Can't be undone 3Claude Code: ask
  • invite_app_memberProvision a generated-app runtime member with a role.1 finding

    Why it is in this group

    • The name "invite_app_member" says "invite": a word for sending, and what is sent cannot be taken back.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...e back in the result and that is a live credential in the conversation transcript."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Invite App Member
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • publish_appPublish an app - freeze current state and make it live at a URL.No findings

    Why it is in this group

    • The name "publish_app" says "publish": a word for a change that another call does not undo.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Publish App
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • reply_platform_requestAdd a reply or a finding to one of your platform requests without opening a new one, e.g.1 finding

    Why it is in this group

    • The name "reply_platform_request" says "reply": a word for sending, and what is sent cannot be taken back.

    Findings

    • Info

      The input schema at properties.body.description mentions "credentials".

      Matched text

      inputSchema.properties.body.description: "...he answer or finding (markdown allowed, credentials are redacted)"

      What this check looks for
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Reply Platform Request
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Changes things 34Claude Code: ask
  • add_file_changeStage one file upsert or delete inside a change set.No findings

    Why it is in this group

    • The name "add_file_change" says "add": a word for a change.
    Description, as the server wrote it
    Stage one file upsert or delete inside a change set. Does not modify the live app until apply_change_set. Paths follow the Fine Structure app file API, documented at https://finestructure.ai/api/mcp/docs.

    Annotations the server declares

    • title: Add File Change
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • agency_create_clientAgency mode only.No findings

    Why it is in this group

    • The name "agency_create_client" says "create": a word for a change.
    Description, as the server wrote it
    Agency mode only. Create or update a client record for an account-level agent. This does not create a verified Fine Structure user account and does not transfer ownership.

    Annotations the server declares

    • title: Agency: Create Client
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • agency_create_client_appAgency mode only.No findings

    Why it is in this group

    • The name "agency_create_client_app" says "create": a word for a change.
    Description, as the server wrote it
    Agency mode only. Create a new app owned by the agent, start generation, and create a claim link for the client. Ownership transfers only when the invited client logs in with the same email and accepts the claim link.

    Annotations the server declares

    • title: Agency: Create Client App
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • apply_change_setApply a staged change set to the app.No findings

    Why it is in this group

    • The name "apply_change_set" says "apply": a word for a change.
    Description, as the server wrote it
    Apply a staged change set to the app. Creates a Saved Version before applying. Blocks on validation errors unless force=true.

    Annotations the server declares

    • title: Apply Change Set
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • attach_agent_whatsappConnect a platform WhatsApp number to one of the account's agents, so the owner can message that number and reach that agent.No findings

    Why it is in this group

    • The name "attach_agent_whatsapp" says "attach": a word for a change.
    Description, as the server wrote it
    Connect a platform WhatsApp number to one of the account's agents, so the owner can message that number and reach that agent. Requires the owner to be verified first. Take phone_number_id from get_agent_whatsapp. A number already used by another account is still valid to connect: it answers only this owner's verified phone.

    Annotations the server declares

    • title: Attach Agent Whatsapp
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • check_domain_verificationCheck Fine Structure custom-domain verification and SSL status for the configured custom domain, then save the latest status.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Check Fine Structure custom-domain verification and SSL status for the configured custom domain, then save the latest status.

    Annotations the server declares

    • title: Check Domain Verification
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • check_subdomain_availableCheck whether a platform subdomain can be claimed before calling set_app_subdomain.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Check whether a platform subdomain can be claimed before calling set_app_subdomain. Returns available plus a status of available, invalid, reserved, taken, current, or empty, with the exact reason. Pass app_id (an app you own) to have that app's own current subdomain reported as 'current' instead of 'taken'.

    Annotations the server declares

    • title: Check Subdomain Available
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • configure_domain_redirectsConfigure custom-domain redirect policy: primary domain, optional www/root redirect, and HTTPS enforcement.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Configure custom-domain redirect policy: primary domain, optional www/root redirect, and HTTPS enforcement.

    Annotations the server declares

    • title: Configure Domain Redirects
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • configure_integrationStore safe non-secret integration metadata for an app.No findings

    Why it is in this group

    • The description's first verb is "store": a word for a change.
    Description, as the server wrote it
    Store safe non-secret integration metadata for an app. Use set_secret for API keys/tokens.

    Annotations the server declares

    • title: Configure Integration
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • confirm_owner_phone_verificationConfirm the 6-digit code the owner received on WhatsApp from start_owner_phone_verification.No findings

    Why it is in this group

    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    Description, as the server wrote it
    Confirm the 6-digit code the owner received on WhatsApp from start_owner_phone_verification. On success the owner is verified: agents can message them, and platform numbers become connectable.

    Annotations the server declares

    • title: Confirm Owner Phone Verification
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_ab_testCreate a native Fine Structure A/B test between existing app pages.No findings

    Why it is in this group

    • The name "create_ab_test" says "create": a word for a change.
    Description, as the server wrote it
    Create a native Fine Structure A/B test between existing app pages. Use update_app first if a variant page still needs to be generated. Creates a Saved Version before the change.

    Annotations the server declares

    • title: Create A/B Test
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_agentCreate an autonomous AI agent on the user's Fine Structure account: a standing worker, not a chat session.No findings

    Why it is in this group

    • The name "create_agent" says "create": a word for a change.
    Description, as the server wrote it
    Create an autonomous AI agent on the user's Fine Structure account: a standing worker, not a chat session. It gets the platform's default safe tool policy and its own email address, it can read and write the app database, and once the owner phone is verified (see get_agent_whatsapp) it can message its owner on WhatsApp and by email through the platform system channels. Pair it with schedule_agent_task for recurring work such as following up new leads on WhatsApp each morning, watching an app for runtime errors, or sending a weekly summary. Messaging anyone other than the verified owner requires a channel the owner connects in the Fine Structure Studio.

    Annotations the server declares

    • title: Create Agent
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • create_appCreate a new application from a natural language prompt.No findings

    Why it is in this group

    • The name "create_app" says "create": a word for a change.
    Description, as the server wrote it
    Create a new application from a natural language prompt. The AI generates a complete web app with pages, components, styling, and data models. Returns a job_id - poll get_job_status to track progress. When the job is done, the app is ready.

    Annotations the server declares

    • title: Create App
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_change_setCreate a staged file change set.No findings

    Why it is in this group

    • The name "create_change_set" says "create": a word for a change.
    Description, as the server wrote it
    Create a staged file change set. Add multiple file changes, validate them as one app state, then apply atomically.

    Annotations the server declares

    • title: Create Change Set
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_entity_recordsCreate/insert records in one app entity.No findings

    Why it is in this group

    • The name "create_entity_records" says "create": a word for a change.
    Description, as the server wrote it
    Create/insert records in one app entity. Executes directly for the authenticated app owner and returns the created record ids.

    Annotations the server declares

    • title: Create Entity Records
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_entity_schemaCreate an entity schema file in entities/<Entity>.json.No findings

    Why it is in this group

    • The name "create_entity_schema" says "create": a word for a change.
    Description, as the server wrote it
    Create an entity schema file in entities/<Entity>.json. Creates a Saved Version before writing.

    Annotations the server declares

    • title: Create Entity Schema
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • create_platform_requestOpen a request to the Fine Structure platform team: a bug, a feature request or a question about the platform itself (not about the user's app).1 finding

    Why it is in this group

    • The name "create_platform_request" says "create": a word for a change.

    Findings

    • Info

      The description mentions "Credential".

      Matched text

      description: "...nd how the team will know it is closed. Credential-looking values are redacted. Returns re..."

      What this check looks for
    Description, as the server wrote it
    Open a request to the Fine Structure platform team: a bug, a feature request or a question about the platform itself (not about the user's app). Use it when something in the platform blocks you instead of working around it. Give a reproduction the team can run (invoke_function / curl / the exact tool call and result), what you expected, and how the team will know it is closed. Credential-looking values are redacted. Returns request_id and a Studio URL; the team's replies, status changes and deployments come back through get_platform_request / list_platform_requests. Limits: 20 per account per day, 32 KB.

    Annotations the server declares

    • title: Create Platform Request
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • invoke_functionRun a backend function of an owned app exactly like the HTTP route and return its status and JSON.No findings

    Why it is in this group

    • The name "invoke_function" says "invoke": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Invoke Function
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • patch_app_filePatch one file by replacing exact text.No findings

    Why it is in this group

    • The name "patch_app_file" says "patch": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Patch App File
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • rename_app_fileRename or move one app source file atomically.No findings

    Why it is in this group

    • The name "rename_app_file" says "rename": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Rename App File
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • schedule_agent_taskCreate a scheduled task for one of the user's agents.No findings

    Why it is in this group

    • The name "schedule_agent_task" says "schedule": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Schedule Agent Task
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • seed_entityCompatibility tool for starter-record creation.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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).

    Annotations the server declares

    • title: Seed Entity Records
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • set_agent_owner_relaySet the owner's consent for one owned agent to relay reports from another owned agent (or all sources with '*').No findings

    Why it is in this group

    • The name "set_agent_owner_relay" says "set": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set Agent Owner Relay
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • set_app_metadataUpdate public HTML-shell metadata immediately, without AI, code edits, publishing or Saved Versions.No findings

    Why it is in this group

    • The name "set_app_metadata" says "set": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set App Metadata
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • set_function_policyCreate or update the server-owned access policy of a backend function (functions/<name>.js).No findings

    Why it is in this group

    • The name "set_function_policy" says "set": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Set Function Policy
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • set_primary_domainSet which app host should be treated as primary for generated links and custom-domain redirects.No findings

    Why it is in this group

    • The name "set_primary_domain" says "set": a word for a change.
    Description, as the server wrote it
    Set which app host should be treated as primary for generated links and custom-domain redirects.

    Annotations the server declares

    • title: Set Primary Domain
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • update_ab_testUpdate a native A/B test, including active state, variants, traffic, and conversion goal.No findings

    Why it is in this group

    • The name "update_ab_test" says "update": a word for a change.
    Description, as the server wrote it
    Update a native A/B test, including active state, variants, traffic, and conversion goal. Creates a Saved Version before the change.

    Annotations the server declares

    • title: Update A/B Test
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
  • update_appUpdate an existing application with a new prompt.No findings

    Why it is in this group

    • The name "update_app" says "update": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Update App
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • update_entity_metadataSet relationship/index metadata on an entity schema.No findings

    Why it is in this group

    • The name "update_entity_metadata" says "update": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Update Entity Metadata
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • update_entity_schemaReplace or shallow-merge an existing entity schema file.No findings

    Why it is in this group

    • The name "update_entity_schema" says "update": a word for a change.
    Description, as the server wrote it
    Replace or shallow-merge an existing entity schema file. Creates a Saved Version before writing.

    Annotations the server declares

    • title: Update Entity Schema
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • update_platform_requestPlatform team only: set the status of a request (open | triaged | in_progress | needs_info | deployed | wont_fix), attach the deployed commit and/or reply.No findings

    Why it is in this group

    • The name "update_platform_request" says "update": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Update Platform Request
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • validate_appRun deterministic app checks: syntax, imports, routes/pages, entity schemas, missing entities, and recorded runtime errors.1 finding

    Why it is in this group

    • The name "validate_app" says "validate": a word for reading.
    • The description's first verb is "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "validate_app" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "validate_app" says "validate": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Run deterministic app checks: syntax, imports, routes/pages, entity schemas, missing entities, and recorded runtime errors.

    Annotations the server declares

    • title: Validate App
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • write_app_fileCreate or replace one file in an app's virtual filesystem.No findings

    Why it is in this group

    • The name "write_app_file" says "write": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Write App File
    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
Only reads 44Claude Code: allow
  • agency_get_claim_statusAgency mode only.No findings

    Why it is in this group

    • The name "agency_get_claim_status" says "get": a word for reading.
    Description, as the server wrote it
    Agency mode only. Inspect one handoff status without exposing the raw claim token.

    Annotations the server declares

    • title: Agency: Get Claim Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • agency_list_clientsAgency mode only.No findings

    Why it is in this group

    • The name "agency_list_clients" says "list": a word for reading.
    Description, as the server wrote it
    Agency mode only. List client records and app handoff status for the authenticated agent.

    Annotations the server declares

    • title: Agency: List Clients
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_current_to_versionCompare the current app files to a Saved Version and return compact per-file diffs.No findings

    Why it is in this group

    • The name "compare_current_to_version" says "compare": a word for reading.
    Description, as the server wrote it
    Compare the current app files to a Saved Version and return compact per-file diffs.

    Annotations the server declares

    • title: Compare Current To Version
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • compare_saved_versionsCompare two Saved Versions and return per-file additions, removals, modifications, and compact diffs.No findings

    Why it is in this group

    • The name "compare_saved_versions" says "compare": a word for reading.
    Description, as the server wrote it
    Compare two Saved Versions and return per-file additions, removals, modifications, and compact diffs.

    Annotations the server declares

    • title: Compare Saved Versions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_ab_test_statsGet views, unique visitors, conversions, and conversion rates for an A/B test.No findings

    Why it is in this group

    • The name "get_ab_test_stats" says "get": a word for reading.
    Description, as the server wrote it
    Get views, unique visitors, conversions, and conversion rates for an A/B test.

    Annotations the server declares

    • title: Get A/B Test Stats
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_agent_conversationRead visible messages, answers and result links in an owned agent's conversation.No findings

    Why it is in this group

    • The name "get_agent_conversation" says "get": a word for reading.
    Description, as the server wrote it
    Read visible messages, answers and result links in an owned agent's conversation. Returns the newest page in chronological order. For older history, pass next_before_id as before_id. For new replies, omit before_id.

    Annotations the server declares

    • title: Get Agent Conversation
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_agent_taskCheck a durable task returned by send_agent_message or list_agent_tasks.No findings

    Why it is in this group

    • The name "get_agent_task" says "get": a word for reading.
    Description, as the server wrote it
    Check a durable task returned by send_agent_message or list_agent_tasks. Includes the latest execution status and pending approvals, including before a run starts. Task scheduling state is separate from run outcome. Read the conversation for the actual answer; accepted/queued is not completed. Approvals must still be decided by the owner in Fine Structure.

    Annotations the server declares

    • title: Get Agent Task
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_agent_whatsappRead the WhatsApp state of the connected account: whether the owner's phone is verified, which platform numbers they can connect, and which conversations already route to which age…No findings

    Why it is in this group

    • The name "get_agent_whatsapp" says "get": a word for reading.
    Description, as the server wrote it
    Read the WhatsApp state of the connected account: whether the owner's phone is verified, which platform numbers they can connect, and which conversations already route to which agent. Call this first whenever the user asks to talk to an agent on WhatsApp, and repeat its next_step to them.

    Annotations the server declares

    • title: Get Agent Whatsapp
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_analyticsTraffic analytics for an app's published site over a chosen window: total views, unique visitors, daily series, top pages, top referrer domains and device split.No findings

    Why it is in this group

    • The name "get_app_analytics" says "get": a word for reading.
    Description, as the server wrote it
    Traffic analytics for an app's published site over a chosen window: total views, unique visitors, daily series, top pages, top referrer domains and device split.

    Annotations the server declares

    • title: Get App Analytics
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_detailDeep introspection of an app: entities, pages, settings, integrations, environment variables, and file structure.No findings

    Why it is in this group

    • The name "get_app_detail" says "get": a word for reading.
    Description, as the server wrote it
    Deep introspection of an app: entities, pages, settings, integrations, environment variables, and file structure. Use this to understand what an app contains before updating it.

    Annotations the server declares

    • title: Get App Detail
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_filesGet the file tree for an app with paths and byte sizes.No findings

    Why it is in this group

    • The name "get_app_files" says "get": a word for reading.
    Description, as the server wrote it
    Get the file tree for an app with paths and byte sizes.

    Annotations the server declares

    • title: Get App Files
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_metadataRead the saved public HTML-shell identity: name, description, language and image URLs/dimensions.No findings

    Why it is in this group

    • The name "get_app_metadata" says "get": a word for reading.
    Description, as the server wrote it
    Read the saved public HTML-shell identity: name, description, language and image URLs/dimensions. Same settings as Studio SEO/GEO.

    Annotations the server declares

    • title: Get App Metadata
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_security_auditRead recent server-side security audit events for an app.No findings

    Why it is in this group

    • The name "get_app_security_audit" says "get": a word for reading.
    Description, as the server wrote it
    Read recent server-side security audit events for an app.

    Annotations the server declares

    • title: Get App Security Audit
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_security_contextReturn safe security context for one owned app: owner id/email, Studio collaborators, generated-app members, route policies, entity policies, function policies, and recent security…No findings

    Why it is in this group

    • The name "get_app_security_context" says "get": a word for reading.
    Description, as the server wrote it
    Return safe security context for one owned app: owner id/email, Studio collaborators, generated-app members, route policies, entity policies, function policies, and recent security audit entries. Does not return secrets and does not grant access to other apps.

    Annotations the server declares

    • title: Get App Security Context
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_app_statusGet app overview: files, published state, URL, active jobs.No findings

    Why it is in this group

    • The name "get_app_status" says "get": a word for reading.
    Description, as the server wrote it
    Get app overview: files, published state, URL, active jobs.

    Annotations the server declares

    • title: Get App Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_domain_ssl_statusReturn SSL/certificate status and pending certificate validation DNS records for the app custom domain.No findings

    Why it is in this group

    • The name "get_domain_ssl_status" says "get": a word for reading.
    Description, as the server wrote it
    Return SSL/certificate status and pending certificate validation DNS records for the app custom domain.

    Annotations the server declares

    • title: Get Domain SSL Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • get_domain_verificationReturn the exact DNS records and instructions required to verify and route the app custom domain.No findings

    Why it is in this group

    • The name "get_domain_verification" says "get": a word for reading.
    Description, as the server wrote it
    Return the exact DNS records and instructions required to verify and route the app custom domain.

    Annotations the server declares

    • title: Get Domain Verification
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_entitiesGet all entity (data model) schemas for an app, with record counts.No findings

    Why it is in this group

    • The name "get_entities" says "get": a word for reading.
    Description, as the server wrote it
    Get all entity (data model) schemas for an app, with record counts. Each entity has fields, types, and relationships.

    Annotations the server declares

    • title: Get Entities
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_errorsGet recent runtime errors for an app (last 20).No findings

    Why it is in this group

    • The name "get_errors" says "get": a word for reading.
    Description, as the server wrote it
    Get recent runtime errors for an app (last 20). Useful for diagnosing issues before updating.

    Annotations the server declares

    • title: Get Errors
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_job_statusPoll the status of an async generation job.No findings

    Why it is in this group

    • The name "get_job_status" says "get": a word for reading.
    Description, as the server wrote it
    Poll the status of an async generation job. Use this after create_app or update_app to know when the job is done. Returns status ('running' or 'done'), progress events, and result summary when complete.

    Annotations the server declares

    • title: Get Job Status
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_pagesGet all pages in an app with their file paths and sizes.No findings

    Why it is in this group

    • The name "get_pages" says "get": a word for reading.
    Description, as the server wrote it
    Get all pages in an app with their file paths and sizes.

    Annotations the server declares

    • title: Get Pages
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_platform_guideReturn a machine-readable Fine Structure / FSe2 guide for AI agents.No findings

    Why it is in this group

    • The name "get_platform_guide" says "get": a word for reading.
    Description, as the server wrote it
    Return a machine-readable Fine Structure / FSe2 guide for AI agents. Call this at the start of an MCP session to learn app files, entities, safe edit workflows, validation, publishing, A/B testing, secrets, and platform rules.

    Annotations the server declares

    • title: Get Platform Guide
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_platform_requestOne platform request with its full history: team replies, status changes (open | triaged | in_progress | needs_info | deployed | wont_fix) and what was deployed (commit, time).No findings

    Why it is in this group

    • The name "get_platform_request" says "get": a word for reading.
    Description, as the server wrote it
    One platform request with its full history: team replies, status changes (open | triaged | in_progress | needs_info | deployed | wont_fix) and what was deployed (commit, time). Pass since=<ISO timestamp> to get only the events after it.

    Annotations the server declares

    • title: Get Platform Request
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_preview_urlReturn editor preview and published/public URLs for an app.No findings

    Why it is in this group

    • The name "get_preview_url" says "get": a word for reading.
    Description, as the server wrote it
    Return editor preview and published/public URLs for an app.

    Annotations the server declares

    • title: Get Preview URL
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • inspect_previewReturn server-side preview context: URLs, persisted runtime/network errors, static clickable candidates, pages, and explicit live-browser availability.No findings

    Why it is in this group

    • The name "inspect_preview" says "inspect": a word for reading.
    Description, as the server wrote it
    Return server-side preview context: URLs, persisted runtime/network errors, static clickable candidates, pages, and explicit live-browser availability.

    Annotations the server declares

    • title: Inspect Live Preview
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_ab_testsList the platform A/B tests configured for an app.No findings

    Why it is in this group

    • The name "list_ab_tests" says "list": a word for reading.
    Description, as the server wrote it
    List the platform A/B tests configured for an app.

    Annotations the server declares

    • title: List A/B Tests
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_agent_conversationsList recent visible conversations belonging to one of your agents.No findings

    Why it is in this group

    • The name "list_agent_conversations" says "list": a word for reading.
    Description, as the server wrote it
    List recent visible conversations belonging to one of your agents. Use get_agent_conversation to read replies and results.

    Annotations the server declares

    • title: List Agent Conversations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_agent_tasksList scheduled tasks for one agent (or the whole account), including schedule, status and next_run_at.No findings

    Why it is in this group

    • The name "list_agent_tasks" says "list": a word for reading.
    Description, as the server wrote it
    List scheduled tasks for one agent (or the whole account), including schedule, status and next_run_at.

    Annotations the server declares

    • title: List Agent Tasks
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_agentsList the AI agents on the user's account with id, name, role, status and FineMail address.No findings

    Why it is in this group

    • The name "list_agents" says "list": a word for reading.
    Description, as the server wrote it
    List the AI agents on the user's account with id, name, role, status and FineMail address.

    Annotations the server declares

    • title: List Agents
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_app_domainsList an app's platform path, subdomain, and configured custom domain with verification, SSL, primary-domain, redirect, publish, and login-gating status.No findings

    Why it is in this group

    • The name "list_app_domains" says "list": a word for reading.
    Description, as the server wrote it
    List an app's platform path, subdomain, and configured custom domain with verification, SSL, primary-domain, redirect, publish, and login-gating status.

    Annotations the server declares

    • title: List App Domains
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_app_membersList generated-app runtime users/members for an app.No findings

    Why it is in this group

    • The name "list_app_members" says "list": a word for reading.
    Description, as the server wrote it
    List generated-app runtime users/members for an app. This is separate from Studio project collaborators.

    Annotations the server declares

    • title: List App Members
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_appsList owned and accepted Studio-shared applications, newest activity first.No findings

    Why it is in this group

    • The name "list_apps" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Apps
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_integrationsList supported integrations and safe connected integration metadata for an app.No findings

    Why it is in this group

    • The name "list_integrations" says "list": a word for reading.
    Description, as the server wrote it
    List supported integrations and safe connected integration metadata for an app. Tokens/secrets are never returned.

    Annotations the server declares

    • title: List Integrations
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_platform_requestsYour account's platform requests, newest activity first.No findings

    Why it is in this group

    • The name "list_platform_requests" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: List Platform Requests
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_saved_versionsList restorable Saved Versions for an app, including versions created by MCP writes.No findings

    Why it is in this group

    • The name "list_saved_versions" says "list": a word for reading.
    Description, as the server wrote it
    List restorable Saved Versions for an app, including versions created by MCP writes.

    Annotations the server declares

    • title: List Saved Versions
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_secret_keysList secret key names for an app.No findings

    Why it is in this group

    • The name "list_secret_keys" says "list": a word for reading.
    Description, as the server wrote it
    List secret key names for an app. Secret values are never returned.

    Annotations the server declares

    • title: List Secret Keys
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • preview_saved_versionPrepare an isolated read-only Saved Version preview, if enabled by the deployment.1 finding

    Why it is in this group

    • The name "preview_saved_version" says "preview": a word for reading.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...execute the returned program with host credentials. Requires app access and versions:read."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Preview Saved Version
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • query_entityQuery app data records for one entity with optional exact-match filters.No findings

    Why it is in this group

    • The name "query_entity" says "query": a word for reading.
    Description, as the server wrote it
    Query app data records for one entity with optional exact-match filters.

    Annotations the server declares

    • title: Query Entity
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • read_app_fileRead one source file from an app's virtual filesystem.No findings

    Why it is in this group

    • The name "read_app_file" says "read": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Read App File
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • read_app_filesRead several source files from an app's virtual filesystem.No findings

    Why it is in this group

    • The name "read_app_files" says "read": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Read App Files
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • validate_change_setValidate current app files plus staged change set files before applying.No findings

    Why it is in this group

    • The name "validate_change_set" says "validate": a word for reading.
    Description, as the server wrote it
    Validate current app files plus staged change set files before applying.

    Annotations the server declares

    • title: Validate Change Set
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • validate_entity_relationshipsValidate entity relationship metadata and *_id references against existing entity schemas.No findings

    Why it is in this group

    • The name "validate_entity_relationships" says "validate": a word for reading.
    Description, as the server wrote it
    Validate entity relationship metadata and *_id references against existing entity schemas.

    Annotations the server declares

    • title: Validate Entity Relationships
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.2. Values in angle brackets are yours to fill in.

claude mcp add --transport http fine-structure https://finestructure.ai/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__fine-structure__agency_list_clients",
      "mcp__fine-structure__agency_get_claim_status",
      "mcp__fine-structure__get_platform_guide",
      "mcp__fine-structure__get_recommended_workflow",
      "mcp__fine-structure__get_job_status",
      "mcp__fine-structure__get_app_status",
      "mcp__fine-structure__get_app_links",
      "mcp__fine-structure__list_app_domains",
      "mcp__fine-structure__get_domain_verification",
      "mcp__fine-structure__get_domain_ssl_status",
      "mcp__fine-structure__list_apps",
      "mcp__fine-structure__get_app_files",
      "mcp__fine-structure__read_app_file",
      "mcp__fine-structure__read_app_files",
      "mcp__fine-structure__get_app_detail",
      "mcp__fine-structure__get_entities",
      "mcp__fine-structure__query_entity",
      "mcp__fine-structure__get_pages",
      "mcp__fine-structure__get_errors",
      "mcp__fine-structure__get_app_analytics",
      "mcp__fine-structure__get_preview_url",
      "mcp__fine-structure__list_saved_versions",
      "mcp__fine-structure__validate_change_set",
      "mcp__fine-structure__inspect_preview",
      "mcp__fine-structure__get_app_security_context",
      "mcp__fine-structure__get_platform_request",
      "mcp__fine-structure__list_platform_requests",
      "mcp__fine-structure__list_app_members",
      "mcp__fine-structure__get_app_security_audit",
      "mcp__fine-structure__compare_saved_versions",
      "mcp__fine-structure__compare_current_to_version",
      "mcp__fine-structure__validate_entity_relationships",
      "mcp__fine-structure__list_secret_keys",
      "mcp__fine-structure__list_integrations",
      "mcp__fine-structure__list_ab_tests",
      "mcp__fine-structure__get_ab_test_stats",
      "mcp__fine-structure__get_app_metadata",
      "mcp__fine-structure__preview_saved_version",
      "mcp__fine-structure__list_agents",
      "mcp__fine-structure__list_agent_tasks",
      "mcp__fine-structure__get_agent_whatsapp",
      "mcp__fine-structure__list_agent_conversations",
      "mcp__fine-structure__get_agent_conversation",
      "mcp__fine-structure__get_agent_task"
    ],
    "ask": [
      "mcp__fine-structure__create_app",
      "mcp__fine-structure__agency_create_client",
      "mcp__fine-structure__agency_create_client_app",
      "mcp__fine-structure__agency_create_claim_link",
      "mcp__fine-structure__update_app",
      "mcp__fine-structure__publish_app",
      "mcp__fine-structure__check_subdomain_available",
      "mcp__fine-structure__check_domain_verification",
      "mcp__fine-structure__set_primary_domain",
      "mcp__fine-structure__configure_domain_redirects",
      "mcp__fine-structure__write_app_file",
      "mcp__fine-structure__patch_app_file",
      "mcp__fine-structure__rename_app_file",
      "mcp__fine-structure__seed_entity",
      "mcp__fine-structure__create_entity_records",
      "mcp__fine-structure__create_change_set",
      "mcp__fine-structure__add_file_change",
      "mcp__fine-structure__apply_change_set",
      "mcp__fine-structure__validate_app",
      "mcp__fine-structure__set_function_policy",
      "mcp__fine-structure__invoke_function",
      "mcp__fine-structure__create_platform_request",
      "mcp__fine-structure__reply_platform_request",
      "mcp__fine-structure__update_platform_request",
      "mcp__fine-structure__invite_app_member",
      "mcp__fine-structure__create_entity_schema",
      "mcp__fine-structure__update_entity_schema",
      "mcp__fine-structure__update_entity_metadata",
      "mcp__fine-structure__configure_integration",
      "mcp__fine-structure__create_ab_test",
      "mcp__fine-structure__update_ab_test",
      "mcp__fine-structure__set_app_metadata",
      "mcp__fine-structure__set_agent_owner_relay",
      "mcp__fine-structure__create_agent",
      "mcp__fine-structure__schedule_agent_task",
      "mcp__fine-structure__confirm_owner_phone_verification",
      "mcp__fine-structure__attach_agent_whatsapp"
    ],
    "deny": [
      "mcp__fine-structure__set_app_subdomain",
      "mcp__fine-structure__add_custom_domain",
      "mcp__fine-structure__remove_custom_domain",
      "mcp__fine-structure__update_entity_record",
      "mcp__fine-structure__update_entity_records",
      "mcp__fine-structure__delete_entity_records",
      "mcp__fine-structure__discard_change_set",
      "mcp__fine-structure__set_route_policy",
      "mcp__fine-structure__set_entity_policy",
      "mcp__fine-structure__update_app_member_role",
      "mcp__fine-structure__remove_app_member",
      "mcp__fine-structure__restore_file_from_version",
      "mcp__fine-structure__set_secret",
      "mcp__fine-structure__delete_secret",
      "mcp__fine-structure__delete_ab_test",
      "mcp__fine-structure__start_owner_phone_verification",
      "mcp__fine-structure__detach_agent_whatsapp",
      "mcp__fine-structure__send_agent_message"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as fine-structure. Review it before you use it.