fline
REMOTE · MCP.FLINE.SH
Hosting for apps you build with AI. Tested with Claude Code and Codex. Private beta: ask for access.
Available components
Last scanned (6 hours ago)
Scores higher than 87% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Cloud Infrastructure
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 5764 tokens (~144/item across 40 items; 40 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management63
- Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage67
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
Tool Safety96
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 5 of 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_deploy_status" implies "deploy" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
- An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 1 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 30 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 25 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 23 Oct 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.
- 21 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://mcp.fline.sh/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.fline.sh | CN=YE1,O=Let's Encrypt,C=US | 17 Oct 2026 | 15 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6d16a53368e45d6815f25e2866ab81f1360 |
| SANs: mcp.fline.sh | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.fline.sh. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| sh. | present | 34349 | 8 | Verified |
| fline.sh. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="fline", resource_metadata="https://mcp.fline.sh/.well-known/oauth-protected-resource/mcp"
Bearer realm="fline", resource_metadata="https://mcp.fline.sh/.well-known/oauth-protected-resource/mcp" Protected resource metadata
| Document | https://mcp.fline.sh/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.fline.sh/mcp |
| Authorisation server | https://hydra.dev.fline.sh/ |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.fline.sh/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.fline.sh/mcp | HTTPS enforced | 308 | https://mcp.fline.sh/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
answer_questions Answer analysis questions ~41
Answer the questions raised during source analysis.
| Name | Type | Req | Description |
|---|---|---|---|
| answers | array | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
attach_domain Attach a domain ~137
Attach a web address the person owns, such as www.example.com, to the project. Answers with the TXT record that proves ownership (challenge_name, challenge_token); list_domains also gives platform_name, the CNAME target that both proves ownership and sends visitors. The person adds the record where they bought the name; fline checks by itself for 48 hours, and check_domain checks now. Prefer a subdomain: most DNS providers allow no CNAME on a bare name. See the use_a_web_address prompt.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
attach_external Declare a service the tenant already runs ~201
Declare a backing service the tenant ALREADY RUNS, so the platform does not provision one. This takes the shape only. offering is one of postgres, redis, mysql, mongodb, rabbitmq; alias defaults to "db" and is what separates two of the same kind in one project; variable defaults to the conventional name for the offering (DATABASE_URL, REDIS_URL, MONGODB_URI, AMQP_URL). No URL, host, port, user or password is accepted here or by any other tool: the project moves to awaiting_secrets and a human types the connection URL into the get_secrets_link form, beside every other value the project is waiting for. Two offerings that derive the same variable are refused, naming the alias that already holds it.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | – |
| idempotency_key | string | – | – |
| offering | string | yes | – |
| project_id | string | yes | – |
| variable | string | – | – |
No output schema declared.
No examples provided.
check_config Check fline.json ~267
Check a fline.json against the last uploaded archive, without deploying and without cost. Answers either ok, or the reason each part was refused — edit and ask again until it is ok, then save the file. There is no port field and there is no need for one: the platform passes PORT and routes whichever port the process opens. An env_names entry may be an object carrying a literal value — {"name": "KAFKA_ADVERTISED_LISTENERS", "value": "PLAINTEXT://kafka:9092"} — which is how a service that names an image is configured, since its ENTRYPOINT reads its whole configuration out of the environment and the platform cannot replace it. A value is permitted only on a service that names an image, is never a credential (name a password or token and leave the value empty; a human enters it), and stands alone: no ref, scope or bind beside it. A managed database's connection string is NOT written this way — use scope "managed" with ref naming the offering and no value. health_path, on a public service, starts with / and has at most 200 characters, with no query, fragment, spaces or "..".
| Name | Type | Req | Description |
|---|---|---|---|
| config | object | yes | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
check_domain Check domain ownership ~121
Run the ownership check for one of the project's domains now, and answer with the result. Call it after the DNS record is published. The check reaches the DNS and is rate-limited behind a certificate budget, so poll it in minutes rather than in seconds. A domain still unproven 48 hours after attach_domain is failed for good, and this answers domain_failed for it: delete_domain, fix the record and attach_domain again.
| Name | Type | Req | Description |
|---|---|---|---|
| hostname | string | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
complete_upload Finish the upload and analyse ~110
Report that the archive is uploaded and start the analysis. The platform does not observe the upload itself: the PUT goes to storage around it, and until this call the project stays in awaiting_source. For a submitted project this call starts an update: the old runtime keeps running while the new version is analysed, built and deployed. blob_key comes from create_project or get_upload_url.
| Name | Type | Req | Description |
|---|---|---|---|
| blob_key | string | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
create_project Create a project ~73
Create a project. Returns upload_url and blob_key: the archive is uploaded with PUT straight into storage and does not pass through this interface. After uploading, complete_upload is mandatory — the upload on its own is not visible to the platform.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| name | string | yes | – |
No output schema declared.
No examples provided.
create_service Create a data service ~413
Create a data service for this workspace: engine=postgres for a PostgreSQL database, engine=valkey for a Valkey instance — the BSD-licensed fork of Redis, which every Redis client speaks unchanged, so ask for it wherever a project wants Redis — or engine=s3 for object storage, an S3-compatible bucket with a size limit, which is what to ask for wherever a project wants a bucket, file uploads or blob storage. It belongs to the workspace and not to a project: it outlives any project and can be read by several. NEVER write a postgres, redis, valkey, minio or s3 service into a compose file or a plan. A project does NOT need this tool to get a database: a variable the plan marks scope "managed" with ref "postgres" or "valkey" is wired at deploy time to a workspace service named <project name>-postgres (or -valkey), reused or created, with its connection string written in by the platform. A service created here under any other name is ignored by that path, so creating one for a project first ends with two. See the add_a_database prompt. A bucket is never wired that way: create it here, and the person pastes its values into whichever variables their application reads. This tool does NOT return a password or key and no tool does: the connection string is shown to the person on the Databases page of their fline dashboard, and a bucket's endpoint, key and bucket name on its Storage page. Do not ask the user for a host, port, password or access key. engine and version default to what the platform serves and size_class to the smallest; the answer names the service as `provisioning`, which becomes `active` once it has been verified end to end.
| Name | Type | Req | Description |
|---|---|---|---|
| engine | string | – | – |
| idempotency_key | string | – | – |
| name | string | yes | – |
| size_class | string | – | – |
| version | string | – | – |
No output schema declared.
No examples provided.
declare_env_names Declare environment variable names ~65
Declare the NAMES of environment variables. Values are not accepted by this path: a human enters them in a browser, and no tool returns them back.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| names | array | yes | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
delete_domain Detach a domain ~54
Detach a domain from the project. The name stops being served; the project keeps its platform hostname.
| Name | Type | Req | Description |
|---|---|---|---|
| hostname | string | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
delete_env_name Delete an environment variable ~100
Remove a variable from the project's secret set. The analysis's record that the project needs this name is kept, so a required variable becomes unset rather than unknown — deleting a value the project needs will hold the next deploy at the secrets gate rather than failing the build with nothing to say. Takes effect on the next deploy or restart.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| name | string | yes | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
delete_project Delete a project ~79
Delete the project. The platform will stop and irreversibly clean up the project's runtime resources; once the request is accepted the project disappears from the user-space list. Its saved passwords and keys are not deleted with it, and neither is a workspace database it used.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
delete_service Delete a data service ~64
Delete a service. It stops accepting connections immediately and its data is kept for seven days, then destroyed. Ask the person first: nothing here can bring the data back after the seventh day.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| service_id | string | yes | – |
No output schema declared.
No examples provided.
deploy Build and deploy ~132
Build the images and hand the project to the platform. Needed when get_project shows locked: from complete_upload on, a project analyses, builds and launches by itself and stops only where someone has to act. In any other state this answers with the state, or refuses with what has to happen first. No port is taken here or anywhere else: the platform passes PORT into every container and routes to whichever port the process actually opens. Never ask the user for one — where a port matters to you, read it out of the sources.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
detach_external Detach a service the tenant supplied ~105
Give an alias back to the platform. If a human already filled the value in, the attachment and the variable both go; if it is still waiting for one, the declaration goes with it and the project stops asking. The tenant's own service is untouched — the platform never ran it and holds nothing of it to delete.
| Name | Type | Req | Description |
|---|---|---|---|
| alias | string | – | – |
| idempotency_key | string | – | – |
| offering | string | yes | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_config Get fline.json ~170
The fline.json for this project's current plan. Save it at the root of the archive you upload and the next deploy builds from it directly, with no analysis: the same plan every time. A short content check and the step that writes the build files still run. Edit it when the project changes, and check the edit with check_config. env_names is not names-only: an entry may be an object with a value, which is how a prebuilt image is configured — see check_config. A public service's health_path is the path fline checks while the app is online, such as /healthz. Keep it when you edit the file: with fline.json committed nothing finds it again, and an empty one means fline checks the front page.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_deploy_status Get deployment status ~68
Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers fline's checks; not_answering means they have failed for at least two minutes (see get_project).
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_events Project timeline ~95
The project's state timeline, oldest first: each move from one state to the next, the reason, which part of the platform made it (gateway, worker, pipeline, cp) and the request id. This is how you tell a slow analysis from one that failed and was retried — get_project shows the current state and nothing about how it got there.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_images List image builds ~74
The history of images the builder produced for the project: build_id, the build state, the plan version, the source hash and each service's digest. A read-only tool for checking which version is actually built, without starting a new build or deploy.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_logs Read logs ~137
Logs. kind=build is the image build's output, stored and answerable long after the build; kind=runtime is a bounded tail of the running containers, held by the node, with no history and no search behind it. For kind=runtime, `service` narrows the tail to one service of the project — without it every service is interleaved, which on a project with more than one is most of what you read. The names are the ones get_project_detail lists.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | – |
| lines | integer | – | – |
| project_id | string | yes | – |
| service | string | – | – |
No output schema declared.
No examples provided.
get_project Get project state ~157
The project's full state: the onboarding stage, the runtime state, open questions, missing secrets and warnings about credentials found in the archive. Also app_health, once the app has been online: status is answering, not_answering, checking (no verdict yet) or paused (fline is putting a new version online or cannot see the server, and judges nothing). not_answering means fline's checks of the app's health_path, or of its front page when it has none, have failed for at least two minutes; problem says what fline saw and ai_text says it in a paragraph. It is usually the app's own fault: read get_logs kind=runtime and fix the app.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_project_detail Diagnose the project ~129
Everything get_project returns, plus what the platform observes: each container's state, health, restart count and image digest, the node and tier, the ingress hostnames, the disk quota, the secret set version the running containers were deployed with, and the last failure with its class. Use this when a deploy has failed or a service is not answering and get_deploy_status has told you only that. The platform half is best-effort: a project that has never deployed has no record there, and the answer degrades to get_project rather than failing.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_secrets_link Issue a secrets entry link ~140
Issue a link to the form where the person types the passwords and keys the project needs. Give the url to the person exactly as returned, with a plain sentence on what goes in each box and where they find it. Do not open it, do not follow it and do not relay its contents. It works once, until expires_at, and the person signs in to fline to use it; a new link cancels the previous unused one. Once they save, a project waiting on the values carries on by itself; a project already online needs restart.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_service Get a data service ~81
One data service by id, with its state and — when it is not active — the reason. Poll this after create_service: a new service is `provisioning` until its certificate is issued and verified, and if that stalls the reason here is what says so. No credentials: none is returned by any tool.
| Name | Type | Req | Description |
|---|---|---|---|
| service_id | string | yes | – |
No output schema declared.
No examples provided.
get_upload_url Issue an upload link ~67
Issue a new archive upload link for an existing project. Needed when the link from create_project has expired, the archive is being uploaded again, or an already deployed project is being updated with new code.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
get_usage Get usage ~291
What this project actually consumed: CPU, memory, disk, files and network over a window. These are QUANTITIES AND NOT CHARGES: fline has no price and no billing during the private beta, nothing charges for what a project uses, and using more than the ceilings is not possible because they are enforced rather than billed. Read `notes` before restating any figure: the network number counts traffic at the containers' own interfaces and is larger than what left the platform, and the memory peak is the highest of readings taken every thirty seconds rather than a true maximum. `coverage` says how much of the window actually reached us; a null figure means nothing measured it, which is not the same as zero. window is one of 1h, 6h, 24h, 7d, 30d and defaults to 24h. per_service defaults to false. THIS TOOL CANNOT CHANGE A PROJECT'S CLASS, and neither can any other tool or any screen of the fline dashboard: "What it may use" on the app's Web address and usage tab only shows the ceilings. If the answer is that the project has outgrown its class, say so plainly to the person and do not send them looking for a setting that does not exist.
| Name | Type | Req | Description |
|---|---|---|---|
| per_service | boolean | – | – |
| project_id | string | yes | – |
| window | string | – | – |
No output schema declared.
No examples provided.
list_domains List domains ~82
The project's custom domains with, for each, the state of its ownership check, the TXT record to publish, when it was last checked and what the last check objected to. Also the platform hostname the names are asked to point at. attach_domain hands back the record once; this is how you find out whether it took.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
list_env_names List environment variable names ~121
The project's environment variables BY NAME: whether each is set, whether the analysis declared it, when it was last written, and — for a non-secret variable — its value. A name that is required and not set is what holds a project in awaiting_secrets. A value shown here was written with set_env and secret=false, and it survives a re-analysis; a SECRET that is set but not declared was added by hand and will not. No secret value is returned here or anywhere — see get_secrets_link.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
list_external List the tenant's own services ~71
The backing services this project's tenant supplies themselves. A completed attachment carries the host it points at; a pending one is marked pending and names the variable a human still has to fill in through get_secrets_link. No connection URL is returned for either, and none can be.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | – |
No output schema declared.
No examples provided.
list_projects List projects ~29
The tenant's projects with their state, address and, once online, app_health (see get_project).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_services List data services ~35
The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_versions List project versions ~72
List the project's deployed versions, newest first: the state_version to pass to rollback, when it was made, who made it, and which version it superseded. The specification itself is not included — use get_config for what a version contains.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
pause_service Pause a data service ~86
Pause a data service. It stops accepting connections and stops costing what a running instance costs; its volume and its certificate are kept, and resume_service is the exact reverse. This is the reversible way to put a service down — delete_service is not, and starts a seven-day clock on the data.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| service_id | string | yes | – |
No output schema declared.
No examples provided.
refresh_config Re-run the analysis ~112
Re-run the analysis ignoring the archive's fline.json, and write a new one. For a configuration that has gone stale because the project's stack changed — a different package manager, a new lockfile. Accepted immediately, not done: poll get_project until it leaves analyzing, then call get_config. This uses one of the account's fresh analyses for the month, while editing the file yourself is free and you know what changed.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
restart Restart the project ~108
Re-apply the project's current version: the same images, deployed again. This is the restart, and it is also the ONLY way a secret that was entered after the last deploy reaches the running containers — a value sits in the store doing nothing until a deploy re-pins the secret set version. Call it after a human has filled in the form behind get_secrets_link on a project that is already running.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
resume_service Resume a data service ~41
Start a paused data service again, with its data and its hostname unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| service_id | string | yes | – |
No output schema declared.
No examples provided.
rollback Roll back to an earlier version ~173
Redeploy an earlier version of the project, named by its state_version from list_versions. Two things surprise people and you must not report either one wrongly. First, the version number does NOT go back: this creates a NEW version holding the old one's contents, numbered higher than every existing one, so after rolling back to 3 the project is on 12, not 3. Second, it restores the specification and NOT the secrets — the current secret values are re-pinned into the new version, and a password that was rotated or removed does not come back. If the stored version no longer passes validation the call is refused rather than deploying something similar; the reason says what is wrong with it.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
| to | integer | yes | – |
No output schema declared.
No examples provided.
set_env Set an environment variable ~459
Set one environment variable for the project. `secret` says which store it goes to and it is REQUIRED, because the two are not interchangeable and there is no default that is right for both. secret=false writes a PLAINTEXT value: it is stored as written, returned by list_env_names, shown in the console, and rendered into every service's environment — a model name, a log level, a public URL, a feature flag. Choose it only for a value you would paste into a public repository. secret=true writes to the secret store, which no tool and no screen can read back, ever, this one included. Use it for a value you already hold: one you generated yourself, such as a random session key, or one the person already pasted into the chat, in which case suggest they replace it with a fresh key through get_secrets_link. For a password or key the person has not given you, use get_secrets_link; never ask them to paste it into the chat. secret=true replaces a secret that is already set. secret=false has four refusals, each with a way on. A name whose final underscore-separated segment is KEY, TOKEN, SECRET, PASSWORD, PASS, PWD, CREDENTIAL, CREDENTIALS or DSN is refused: rename the variable, or send the same value with secret=true. An empty value is refused: an empty variable is indistinguishable from an absent one and the deploy fails on it later, so declare the name and leave the value to a person instead. A name that already holds a secret is refused: call delete_env_name first, then set it. And a name the plan binds to a managed database or an addon is refused, because the platform provisions that and writes the connection string itself. Do not set such a name with secret=true either: the platform skips wiring a variable that already holds a value, so the database is never connected. A plaintext value survives the next analysis; a secret still does not. Either takes effect on the next deploy or restart.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| name | string | yes | – |
| project_id | string | yes | – |
| secret | boolean | yes | – |
| value | string | yes | – |
No output schema declared.
No examples provided.
stop Stop the project ~75
Stop the project. NOT IMPLEMENTED: the platform has no stop, and this refuses. To take an application out of service, delete_project it. delete_domain takes off only a web address the person owns; the project's fline address keeps answering.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
submit_declaration Describe the project ~55
Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules.
| Name | Type | Req | Description |
|---|---|---|---|
| declaration | object | yes | – |
| idempotency_key | string | – | – |
| project_id | string | yes | – |
No output schema declared.
No examples provided.
How do I install the fline MCP server?
fline is a hosted endpoint at https://mcp.fline.sh/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.fline.sh
claude mcp add --transport http sh-fline-fline 'https://mcp.fline.sh/mcp'
What is the fline MCP server?
fline is an MCP server listed in the public MCP registry as sh.fline/fline. Hosting for apps you build with AI. Tested with Claude Code and Codex. Private beta: ask for access. This page covers its hosted endpoint (https://mcp.fline.sh/mcp).
Is the fline MCP server safe to use?
fline scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the fline MCP server expose?
fline exposes 40 tools: list_projects, create_project, delete_project, get_upload_url, complete_upload, and 35 more. Their descriptions and schemas cost roughly 4,890 tokens of context every time the server is loaded.
Does the fline MCP server require authentication?
Yes. fline asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the fline MCP server still maintained?
fline is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.