# Croft (remote · mcp.oncroft.net)

Deploy and host the apps your AI assistant builds — a real server, database, and shareable URL.

- Trust score: 78/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-12

## Components

- remote · `mcp.oncroft.net`: 78/100 (this document), [markdown](https://verifymcp.io/servers/net-oncroft-croft/mcp.md), [page](https://verifymcp.io/servers/net-oncroft-croft/mcp)

## Channel facts

- Endpoint: `https://mcp.oncroft.net`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-12.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - 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.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1833 tokens (~73/item across 25 items; 25 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 80/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 29% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http net-oncroft-croft https://mcp.oncroft.net/
```

### Codex

```toml
[mcp_servers.net-oncroft-croft]
url = "https://mcp.oncroft.net/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "net-oncroft-croft": {
      "type": "remote",
      "url": "https://mcp.oncroft.net/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add net-oncroft-croft --url https://mcp.oncroft.net/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  net-oncroft-croft:
    url: "https://mcp.oncroft.net/"
```

### Other

```json
{
  "mcpServers": {
    "net-oncroft-croft": {
      "type": "http",
      "url": "https://mcp.oncroft.net/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-12 (score 78, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-08-11 (score 77, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-08-10 (score 77, +1)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-08-09 (score 76, 0)

- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-08-08 (score 76, +1)

- [functional regression] Schema quality: 1045 → 1180
- [functional improvement] Stability: unverified → 0.03
- [functional] This server's schema is too large to store in full, so we cannot compare its tools day to day

### 2026-08-07 (score 75, +37)

- [security improvement] Transport: unverified → pass
- [security] Authorization: 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.
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: pass
- [functional] First check of Schema quality: good
- [functional] First check of Tool coverage: 100
- [functional] First check of Tool coverage: 22

### 2026-08-06 (score 38)

First indexed and scored.

## MCP tools (25)

### `get_platform_conventions` (~26 tokens)

Get platform conventions

Return the Croft golden-path rules that every app on this workspace must follow.

Output parameters:

- `conventions` (string)

### `list_apps` (~24 tokens)

List apps

List the apps in this workspace with their URLs, status, and last release.

Output parameters:

- `app_limit` (integer)
- `apps` (array)
- `apps_remaining` (integer)

### `create_app` (~57 tokens)

Create app

Provisions an empty app on this workspace: a git repo, subdomain, port, and golden-path scaffold files. It contains no feature implementation and is not yet live.

Input parameters:

- `description` (string)
- `name` (string, required)

Output parameters:

- `app` (string)
- `conventions` (string)
- `files` (array)
- `live` (boolean)
- `url` (string)

### `get_app` (~30 tokens)

Get app

Get an app's file manifest, recent releases, and secret key names.

Input parameters:

- `name` (string, required)

Output parameters:

- `files` (array)
- `name` (string)
- `public_paths` (array)
- `releases` (array)
- `schedules` (array)
- `secret_keys` (array)
- `shared` (boolean)
- `status` (string)
- `url` (string)

### `read_file` (~69 tokens)

Read file

Read one file from an app's own git repo on this Croft workspace. No external API — the path is resolved inside the app's repository.

Input parameters:

- `app` (string, required): The app's name.
- `path` (string, required): Repo-relative file path, e.g. "app/models/user.rb".

Output parameters:

- `content` (string)
- `path` (string)

### `write_files` (~72 tokens)

Write files

Writes files into an app's git repo and commits them (as 'Claude via Croft'). files is a list of {path, content}. Committed files are staged in the repo; they are not built or published until the app is deployed.

Input parameters:

- `app` (string, required)
- `files` (array, required)

Output parameters:

- `files` (array)
- `live` (boolean)
- `ok` (boolean)
- `sha` (string)

### `deploy` (~76 tokens)

Deploy

Commits, builds (Nixpacks), and deploys the app. Returns a deploy job id; the build runs in the background and its deploy_state moves through queued and running before it ends in succeeded or failed. The app is live only once the deploy has succeeded.

Input parameters:

- `app` (string, required)
- `message` (string)

Output parameters:

- `app` (string)
- `deploy_job` (integer)
- `live` (boolean)
- `status` (string)

### `status` (~83 tokens)

App status

Reports an app's deploy and health status. `live` is true only when the latest deploy has fully succeeded; `deploy_state` gives the current stage (queued, running, succeeded, or failed). Read-only and safe to call repeatedly — each call returns the current stage, so it can be polled to follow a deploy's progress.

Input parameters:

- `app` (string, required)

Output parameters:

- `app` (string)
- `deploy_state` (string)
- `health` (string)
- `last_deploy` (object|null)
- `live` (boolean)
- `public_paths` (array)
- `releases` (integer)
- `schedules` (array)
- `shared` (boolean)
- `url` (string)

### `logs` (~34 tokens)

App logs

Recent runtime logs for an app (relayed from its box).

Input parameters:

- `app` (string, required)
- `lines` (integer)

Output parameters:

- `app` (string)
- `health` (string)
- `logs` (string)

### `rollback` (~24 tokens)

Roll back

Re-deploy the previous release of an app.

Input parameters:

- `app` (string, required)

Output parameters:

- `deploy_job` (integer)
- `status` (string)

### `delete_app` (~83 tokens)

Delete app

Permanently deletes an app: removes its containers, data, and source code from the server, then deletes the app record. Irreversible. Does not affect other apps or the server. Deletes only when confirm is true.

Input parameters:

- `app` (string, required)
- `confirm` (boolean, required): Must be true for the deletion to proceed; otherwise the call is a no-op.

Output parameters:

- `app` (string)
- `confirmation_required` (boolean)
- `deleted` (string)
- `ok` (boolean)

### `set_secret` (~50 tokens)

Set secret

Set (or replace) an env secret for an app. Value is stored encrypted and injected at deploy.

Input parameters:

- `app` (string, required)
- `key` (string, required)
- `value` (string, required)

Output parameters:

- `key` (string)
- `ok` (boolean)

### `list_secret_keys` (~27 tokens)

List secret keys

List an app's secret key names (never values).

Input parameters:

- `app` (string, required)

Output parameters:

- `keys` (array)

### `list_users` (~21 tokens)

List users

List the people in this workspace and which apps they can access.

Output parameters:

- `users` (array)

### `invite_user` (~122 tokens)

Invite user

Invite someone by email, set their workspace role, and grant app access. role is member (use apps), creator (can build their own apps), or admin. apps is 'all' or a list of app names.

Input parameters:

- `apps` (string|array): Which apps to grant access to: "all" for every app, or a list of app names.
- `email` (string, required): Email address of the person to invite.
- `role` (string): Workspace role: member (uses shared apps), creator (builds their own apps), or admin.

Output parameters:

- `apps`
- `invited` (string)

### `grant_access` (~31 tokens)

Grant app access

Grant an existing user access to an app.

Input parameters:

- `app` (string, required)
- `email` (string, required)

Output parameters:

- `app` (string)
- `email` (string)
- `ok` (boolean)

### `revoke_access` (~31 tokens)

Revoke app access

Revoke a user's access to an app.

Input parameters:

- `app` (string, required)
- `email` (string, required)

Output parameters:

- `ok` (boolean)

### `set_public_paths` (~126 tokens)

Set public paths

Sets which of an app's paths are reachable WITHOUT login. By default an app is fully private (workspace login required everywhere). Pass the complete desired list of specific paths (e.g. ["/survey"]); each listed path and everything under it becomes public, everything else stays private. An empty list makes the app fully private again. The whole app cannot be made public — root or wildcard paths are rejected.

Input parameters:

- `app` (string, required)
- `paths` (array, required): Full list of public paths, each starting with / (e.g. "/survey"). Empty to make fully private.

Output parameters:

- `app` (string)
- `public` (boolean)
- `public_paths` (array)

### `set_schedules` (~135 tokens)

Set scheduled tasks

Sets the app's scheduled tasks. Each is { name, cron, path }: on the cron (standard 5-field, UTC) Croft makes an internal POST to the app's path, and the app does the work (e.g. send a daily email, sync an API). Use this for anything recurring instead of writing your own cron — it survives deploys and reboots and is shown in the panel. Also implement the endpoint (e.g. a POST route at that path). Pass the full desired list; an empty list clears all schedules.

Input parameters:

- `app` (string, required)
- `schedules` (array, required)

Output parameters:

- `app` (string)
- `schedules` (array)

### `set_database_sharing` (~151 tokens)

Set database sharing

Turns this app's database sharing on or off. Off by default (the database is private). When on, other apps in the same workspace may read AND write this app's SQLite database through Croft's internal broker at http://croft-data:8080/q/<this-app-name> (send {"sql":"…","params":[…]}), and this app is listed to other apps as reusable shared data. Turn it on for an app whose data other apps should reuse — e.g. a CRM's contacts list that an invoicing app also needs.

Input parameters:

- `app` (string, required)
- `shared` (boolean, required): true to share this app's database with the workspace; false to keep it private.

Output parameters:

- `app` (string)
- `shared` (boolean)

### `list_connectors` (~51 tokens)

List connectors

Lists the workspace's API connectors (external services apps can call without holding the credential) and their state. `active` connectors are usable; `draft` ones still need a workspace admin to add the credential.

Output parameters:

- `connectors` (array)

### `describe_connector` (~49 tokens)

Describe connector

Returns a connector's full manifest — base URL, auth style, and the named operations (method, path, params) an app can call. Never returns the credential.

Input parameters:

- `name` (string, required)

Output parameters:

- `auth_style` (string)
- `base_url` (string)
- `description` (string)
- `enabled` (boolean)
- `has_credential` (boolean)
- `kind` (string)
- `name` (string)
- `operations` (array)
- `status` (string)

### `propose_connector` (~192 tokens)

Propose connector

Creates a new API connector as a DRAFT from the vendor's API docs: you supply the base URL, auth style, and an operations manifest. A workspace member (owner, admin, or creator) then opens the panel and adds the credential to activate it — the credential never passes through you. auth_style is bearer|header|query|basic; for header/query also give auth_param (the header/param name).

Input parameters:

- `auth_param` (string): Header or query-param name (for header/query auth).
- `auth_style` (string, required)
- `base_url` (string, required): https base URL, e.g. "https://api.stripe.com".
- `description` (string)
- `name` (string, required): Short slug, e.g. "stripe".
- `operations` (object, required): Map of operation name → { method, path, params: [names] }. Path may contain {placeholders}.

Output parameters:

- `connector` (string)
- `operations` (array)
- `status` (string)

### `grant_connector` (~131 tokens)

Grant connector to app

Gives one of your apps access to a connector. The app can then call the connector's operations. Note: this lets the app's code, and everyone the app is shared with, use the connector's credential. A connector an admin has marked admins-only can only be granted by an admin. Some connectors require admin approval: when a creator grants one of those, the grant is created as 'requested' and an owner/admin must approve it (they're emailed) before the app can use it — owners/admins granting it are approved automatically.

Input parameters:

- `app` (string, required)
- `connector` (string, required)

Output parameters:

- `app` (string)
- `connector` (string)
- `state` (string)

### `list_grants` (~29 tokens)

List connector grants

Lists the connectors an app can reach and each grant's state.

Input parameters:

- `app` (string, required)

Output parameters:

- `app` (string)
- `grants` (array)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/net-oncroft-croft/mcp#diagnostics

## Score history

- 2026-08-12: 78
- 2026-08-11: 77
- 2026-08-10: 77
- 2026-08-09: 76
- 2026-08-08: 76
- 2026-08-07: 75
- 2026-08-06: 38

## Links

- Remote endpoint: https://mcp.oncroft.net/
- Website: https://oncroft.net/
- Changelog RSS feed: https://verifymcp.io/servers/net-oncroft-croft/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/net-oncroft-croft/mcp.json
- HTML version of this page: https://verifymcp.io/servers/net-oncroft-croft/mcp
