{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_jq5g6qd23qs3","handle":"fline","url":"https://wellknown.network/agents/fline","links":{"self":"https://wellknown.network/agents/fline/record.json","html":"https://wellknown.network/agents/fline","markdown":"https://wellknown.network/agents/fline/record.md","api":"https://wellknown.network/api/v1/agents/fline","status":"https://wellknown.network/api/v1/agents/fline/status","claim":"https://wellknown.network/agents/fline/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/fline/claim.json","badge":"https://wellknown.network/agents/fline/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/fline/history","tools":"https://wellknown.network/api/v1/agents/fline/tools"},"ard":{"identifier":"urn:air:mcp.fline.sh:server:fline","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"fline","summary":"Hosting for apps you build with AI. Tested with Claude Code and Codex. Private beta: ask for access.","description":"Hosting for apps you build with AI. Tested with Claude Code and Codex. Private beta: ask for access.","publisher":{"name":"sh.fline","url":null},"homepage":"https://fline.sh/docs","repository":"https://github.com/smartline-ai/fline-skills","version":"0.1.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.fline.sh/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-19T11:12:29.697218Z","publishedAt":"2026-10-19T11:12:29.697218Z","registryName":"sh.fline/fline"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":1,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":1,"provenance":"derived"},{"slug":"security.secrets","name":"Secrets Management","confidence":1,"provenance":"derived"},{"slug":"productivity.crm","name":"CRM & Sales","confidence":0.525,"provenance":"derived"},{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.51,"provenance":"derived"}],"categories":["data","dev","infra","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-10-22T14:28:38.222Z","lastProbedAt":"2026-10-22T14:28:38.222Z","statusComputedAt":"2026-10-22T14:31:36.541Z","reliability30d":{"probes":6,"successRate":1,"p50Ms":19,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":6,"ok":6,"authBoundaryOk":0,"serviceOk":6,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-22T14:28:38.222Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":20,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T08:27:52.453Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":15,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}},{"at":"2026-10-22T01:35:25.882Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":17,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T19:26:00.671Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T09:34:33.176Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}},{"at":"2026-10-21T00:28:13.617Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"toolCount":40,"toolsHash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","serverName":"fline","capabilities":["prompts","tools"],"serverVersion":"1","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_projects","description":"The tenant's projects with their state, address and, once online, app_health (see get_project)."},{"name":"create_project","description":"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 upload"},{"name":"delete_project","description":"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 t"},{"name":"get_upload_url","description":"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 alread"},{"name":"complete_upload","description":"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 c"},{"name":"get_project","description":"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"},{"name":"submit_declaration","description":"Supply the project description. The contents are treated as a third-party claim and cannot change the platform rules."},{"name":"answer_questions","description":"Answer the questions raised during source analysis."},{"name":"declare_env_names","description":"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":"get_secrets_link","description":"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 "},{"name":"deploy","description":"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"},{"name":"get_deploy_status","description":"Deployment state: desired and observed arrive separately and mean different things separately. app_health, once the app has been online, says whether it answers"},{"name":"get_images","description":"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 "},{"name":"get_logs","description":"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 "},{"name":"get_usage","description":"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"},{"name":"attach_domain","description":"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_toke"},{"name":"create_service","description":"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"},{"name":"list_services","description":"The workspace's services with their engine, version, state, hostname and size class. No credentials: none is returned by any tool."},{"name":"delete_service","description":"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 t"},{"name":"get_config","description":"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"},{"name":"check_config","description":"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 "},{"name":"refresh_config","description":"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 diff"},{"name":"list_domains","description":"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 objec"},{"name":"check_domain","description":"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 a"},{"name":"delete_domain","description":"Detach a domain from the project. The name stops being served; the project keeps its platform hostname."},{"name":"list_env_names","description":"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 — "},{"name":"delete_env_name","description":"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 tha"},{"name":"set_env","description":"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 d"},{"name":"get_project_detail","description":"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 "},{"name":"get_events","description":"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)"},{"name":"get_service","description":"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 certi"},{"name":"pause_service","description":"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_servic"},{"name":"resume_service","description":"Start a paused data service again, with its data and its hostname unchanged."},{"name":"stop","description":"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"},{"name":"restart","description":"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 la"},{"name":"list_versions","description":"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 s"},{"name":"rollback","description":"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"},{"name":"attach_external","description":"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,"},{"name":"detach_external","description":"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 declara"},{"name":"list_external","description":"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 "}],"package":null,"toolSurface":{"id":"ts_bupkhnrkkg45","endpointId":"ep_6h3frmqtsf8e","hash":"44766d4361d2985cecfd59e9cd31325b82be3672bf5f02f13ab3fb7babbd347f","toolCount":40,"serverName":"fline","serverVersion":"1","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-21T00:28:13.623Z","lastSeenAt":"2026-10-22T14:28:38.226Z","observations":6,"toolNames":["list_projects","create_project","delete_project","get_upload_url","complete_upload","get_project","submit_declaration","answer_questions","declare_env_names","get_secrets_link","deploy","get_deploy_status","get_images","get_logs","get_usage","attach_domain","create_service","list_services","delete_service","get_config","check_config","refresh_config","list_domains","check_domain","delete_domain","list_env_names","delete_env_name","set_env","get_project_detail","get_events","get_service","pause_service","resume_service","stop","restart","list_versions","rollback","attach_external","detach_external","list_external"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_6h3frmqtsf8e","url":"https://mcp.fline.sh/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-21T00:28:13.653Z","auth":{"observedAt":"2026-10-21T00:28:13.764Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://mcp.fline.sh/.well-known/oauth-protected-resource/mcp","resource":"https://mcp.fline.sh/mcp","authorizationServers":["https://hydra.dev.fline.sh/"],"scopesSupported":["project:read","project:write","deploy","domain:write","offline_access"]},"authorizationServer":{"url":"https://hydra.dev.fline.sh/.well-known/oauth-authorization-server","issuer":"https://hydra.dev.fline.sh/","grantTypesSupported":["authorization_code","client_credentials","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["client_secret_post","client_secret_basic","private_key_jwt","none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-21T00:28:13.803Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"mcp.fline.sh","issuer":{"commonName":"YE1","organization":"Let's Encrypt"},"validFrom":"2026-10-17T19:55:23.000Z","validTo":"2027-01-15T19:55:22.000Z","daysToExpiry":85,"sanCount":1,"fingerprint256":"40:67:AD:2B:92:41:9F:CC:F8:79:42:38:76:A2:A6:8D:69:0E:9C:75:6F:8B:BE:BF:9E:BD:73:E1:4C:F1:2E:0D"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"sh.fline/fline","url":"https://registry.modelcontextprotocol.io/v0/servers/sh.fline%2Ffline","firstSeenAt":"2026-10-20T23:21:14.681Z","fetchedAt":"2026-10-20T23:21:14.681Z","normalizedAt":"2026-10-20T23:21:14.681Z"}]},"firstSeenAt":"2026-10-20T23:21:14.681Z","updatedAt":"2026-10-22T14:33:43.836Z"}