Fine Structure
REMOTE · FINESTRUCTURE.AI · SCANNED AUG 3
Remote MCP server for agents that create, edit, validate, and publish Fine Structure apps.
Available components
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 →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 95 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- 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 Usability71
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 7378 tokens (~77/item across 95 items; 95 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management26
- Stability check failed: schema churn in the 8 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 3 additions. See how to fix → Fail
Tool Coverage94
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 82% of tool parameters carry a description.Partial
Capabilities20
- Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · finestructure.ai
claude mcp add --transport http ai-finestructure-fine-structure https://finestructure.ai/api/mcp
[mcp_servers.ai-finestructure-fine-structure] url = "https://finestructure.ai/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ai-finestructure-fine-structure": {
"type": "remote",
"url": "https://finestructure.ai/api/mcp",
"enabled": true
}
}
} openclaw mcp add ai-finestructure-fine-structure --url https://finestructure.ai/api/mcp --transport streamable-http
mcp_servers:
ai-finestructure-fine-structure:
url: "https://finestructure.ai/api/mcp" {
"mcpServers": {
"ai-finestructure-fine-structure": {
"type": "http",
"url": "https://finestructure.ai/api/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
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 Aug 26 +1
- Stability: 0.23 → fail ▼ security
- A breaking change shipped without a version bump: still 1.0.0 ▼ security
- Tool “update_entity_record” rewrote its description, which is the text the model reads security
- Tool “restore_saved_version” rewrote its description, which is the text the model reads security
- Tool “seed_entity” rewrote its description, which is the text the model reads security
- “restore_saved_version” dropped the required parameter “confirm” ▼ functional
- New tool “create_entity_records” functional
- New tool “delete_entity_records” functional
- New tool “update_entity_records” functional
- “seed_entity” added an optional parameter “reason” cosmetic
- “update_entity_record” added an optional parameter “reason” cosmetic
- “restore_saved_version” reworded the description of “snapshot_id” cosmetic
- “seed_entity” reworded the description of “mode” cosmetic
- “seed_entity” reworded the description of “records” cosmetic
- 1 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 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
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 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
- 26 Jul 26 59
First indexed and scored.
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 3 Aug 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 | 25 Jun 2026 | 23 Sept 2026 | ECDSA 256 | ECDSA-SHA256 | 66f212eab1dfc48113660350517c4ba4 |
| 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 |
DNSSEC insecure
Validation of finestructure.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 3799 | 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=() |
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.
get_app_status ~34
Get app overview: files, published state, URL, active jobs.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
get_domain_ssl_status ~60
Return SSL/certificate status and pending certificate validation DNS records for the app custom domain.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| domain | string | — | Optional configured custom domain. If omitted, uses the app's current custom domain. |
No output schema declared.
No examples provided.
get_domain_verification ~60
Return the exact DNS records and instructions required to verify and route the app custom domain.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| domain | string | — | Optional configured custom domain. If omitted, uses the app's current custom domain. |
No output schema declared.
No examples provided.
get_entities ~45
Get all entity (data model) schemas for an app, with record counts. Each entity has fields, types, and relationships.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
get_errors ~53
Get recent runtime errors for an app (last 20). Useful for diagnosing issues before updating.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| limit | integer | — | Max errors to return (default 20) |
No output schema declared.
No examples provided.
get_job_status ~70
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.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | The job_id returned by create_app or update_app |
No output schema declared.
No examples provided.
get_pages ~32
Get all pages in an app with their file paths and sizes.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
get_platform_guide ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | — | Optional app ID. If provided, the guide includes a safe app context summary. |
| sections | array | — | Optional subset of guide sections to return. |
| task_type | string | — | Optional task hint, for example edit_app, direct_file_edit, seed_data, or publish_app. |
No output schema declared.
No examples provided.
get_preview_url ~31
Return editor preview and published/public URLs for an app.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
No output schema declared.
No examples provided.
get_recommended_workflow ~103
Return the recommended MCP tool sequence for a task type. Use this before creating apps, editing files, seeding data, publishing, setting up A/B tests, restoring versions, or configuring secrets/integrations.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | — | Optional app ID. If provided, the workflow includes a safe app context summary. |
| goal | string | — | Optional short description of the user's goal. |
| task_type | string | — | The task type to plan. |
No output schema declared.
No examples provided.
inspect_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 ~110
Provision a generated-app runtime member with a role. This does not create a Studio collaborator. The owner role cannot be assigned. If password is omitted, a temporary password is generated and returned once.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| string | yes | Member email | |
| full_name | string | — | — |
| password | string | — | Optional initial password. If omitted, one is generated. |
| role | string | yes | App role, e.g. admin/staff/customer |
No output schema declared.
No examples provided.
list_ab_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_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 ~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 ~17
List all applications owned by the authenticated user.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
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_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 ~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 ~94
Patch one file by replacing exact text. Safer than full overwrite for targeted edits. Creates a Saved Version before changing content.
| 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.
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 ~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 ~60
Read one source file from an app's virtual filesystem.
| 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 ~57
Read several source files from an app's virtual filesystem.
| 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 ~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 ~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 ~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.
restore_file_from_version ~75
Restore one file from a Saved Version instead of restoring the entire app. Creates a Saved Version before changing the file.
| 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.
restore_saved_version ~94
Compatibility endpoint for full Saved Version restore. MCP cannot execute this operation because it can replace database records without the dedicated in-chat approval flow. Use list_saved_versions and compare_current_to_version for read-only inspection, then ask the authenticated app owner to restore through the Fine Structure UI.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| snapshot_id | string | yes | Saved Version snapshot_id to inspect before restoring in the UI |
No output schema declared.
No examples provided.
seed_entity ~126
Compatibility tool for proposing starter-record creation. It never inserts records directly: it creates a pending approval that the app owner must approve or reject in Studio chat. Approval-free initial seed is server-controlled inside create_app and cannot be requested through MCP.
| Name | Type | Req | Description |
|---|---|---|---|
| app_id | string | yes | The app ID |
| entity | string | yes | Entity name |
| mode | string | — | append always proposes creation; skip_if_not_empty proposes only when the entity is empty |
| reason | string | — | Why these records should be created |
| records | array | yes | Records to propose for creation after approval |
No output schema declared.
No examples provided.
set_entity_policy ~70
Create or update server-side read/write role policy for an app entity.
| 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 |
| write | array | yes | Roles allowed to write |
No output schema declared.
No examples provided.
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 ~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 ~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.
update_ab_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 ~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 ~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 ~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 ~97
Compatibility tool for proposing an update to one record by ID. It returns a pending approval and never changes the record until the app owner approves it in Studio chat.
| 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 ~160
Propose updates to exact records. Select explicit record_ids or exact-match filters and provide shared changes, or provide per-record updates. The database remains unchanged until the app owner approves the frozen request in Studio chat.
| 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 ~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.
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 ~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 ~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 ~72
Create or replace one file in an app's virtual filesystem. Creates a Saved Version before changing content.
| 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.