# 2ools (remote · 2ools.app)

Build, version, review, and export websites, web apps, and games from a conversation.

- Trust score: 68/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `2ools.app`: 68/100 (this document), [markdown](https://verifymcp.io/servers/app-2ools-mcp/2ools.md), [page](https://verifymcp.io/servers/app-2ools-mcp/2ools)

## Channel facts

- Endpoint: `https://2ools.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.3.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-03.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (approve_version).
  - 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.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3607 tokens (~81/item across 44 items; 43 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 83/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 48% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### Claude

```bash
claude mcp add --transport http app-2ools-mcp https://2ools.app/mcp
```

### Codex

```toml
[mcp_servers.app-2ools-mcp]
url = "https://2ools.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "app-2ools-mcp": {
      "type": "remote",
      "url": "https://2ools.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add app-2ools-mcp --url https://2ools.app/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-2ools-mcp:
    url: "https://2ools.app/mcp"
```

### Other

```json
{
  "mcpServers": {
    "app-2ools-mcp": {
      "type": "http",
      "url": "https://2ools.app/mcp"
    }
  }
}
```

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-03 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 67, +2)

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

### 2026-07-31 (score 65, +6)

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

### 2026-07-30 (score 59, −5)

- [functional regression] Schema quality: good → unverified

### 2026-07-28 (score 64, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-07-27 (score 64)

First indexed and scored.

## MCP tools (43)

### `create_public_preview` (~123 tokens)

Create free 2ools preview

Turn a complete standalone HTML document already created in this chat into a temporary, read-only 2ools preview. Free and authless; expires after 24 hours. This tool does not generate the page—write the HTML first, then call it.

Input parameters:

- `html` (string, required): Complete standalone HTML document beginning with <!doctype html> or <html>, including its CSS and JavaScript.
- `idempotency_key` (string, required): Caller-generated retry key. Reuse returns the same preview instead of storing a duplicate.
- `name` (string, required): Short public preview name.

### `list_build_systems` (~69 tokens)

List 2ools build systems

List the Curators, Rulebooks, and Skills this paid account may explicitly apply. Use before build_from_conversation when the user names a creative system or asks what is available.

Input parameters:

- `output_target` (string): Optional target filter. Omit to list every compatible system available to the account.

### `build_from_conversation` (~404 tokens)

Build conversation in 2ools

Create a new 2ools project from a structured conversation brief and queue one durable build. Returns project_id and job_id; use get_build to retrieve completion status and the protected preview.

Input parameters:

- `audience` (string): Primary audience and the job they need to complete.
- `content_constraints` (array): Claims, wording, exclusions, or fidelity constraints the build must obey.
- `conversation_summary` (string, required): Factual build brief distilled from the conversation, including the intended artifact and key decisions.
- `curator_id` (string): Exact Curator ID from list_build_systems. Omit for automatic selection.
- `entity` (object): Grounded identity facts that must survive the build.
- `headline` (string): Exact hero headline to preserve verbatim in the generated site.
- `idempotency_key` (string, required): Caller-generated unique key. Reusing it returns the original project/job instead of creating a duplicate.
- `max_iterations` (integer): Hard project cap for later outside-agent child revisions. Defaults to 6 and cannot exceed 12.
- `model` (string): Generation engine. studio is keyless; other models require an available account provider or linked Engine.
- `output_target` (string): Delivery target: site, browser game, desktop wrapper, embeddable component, floating overlay, or standalone HTML.
- `pages` (array): Pages to generate. Use Home for a one-page site or widget.
- `project_name` (string, required): Short name for the new 2ools project.
- `requirements` (array): Concrete functionality, content, and section requirements.
- `rulebook_id` (string): Exact compatible Rulebook ID from list_build_systems. Overrides the Curator's default Rulebook.
- `skill_ids` (array): Exact compatible Skill IDs from list_build_systems. When supplied, replaces the Rulebook's default Skill set.
- `visual_direction` (string): Desired visual character, composition, color, typography, or references.

### `refine_project` (~158 tokens)

Refine a 2ools project

Create one protected child version from a saved base version and concrete review feedback. Preserves the base source as currentCode, consumes one persisted project iteration, and returns an asynchronous job_id.

Input parameters:

- `base_version_id` (string, required): Authoritative saved version to use as the parent and current source.
- `feedback` (string, required): Specific requested changes. Requirements not explicitly changed remain in force.
- `idempotency_key` (string, required): Unique retry key. Reuse returns the original revision job without consuming another iteration.
- `model` (string): Generation engine for this child revision. Studio safely preserves the parent but cannot apply substantive edits; choose an AI model or linked Engine for real revisions.
- `project_id` (string, required): Project containing the saved base version.

### `get_build` (~52 tokens)

Get 2ools build

Get one build's current status, progress, errors, completed version IDs, and protected preview URLs. Does not return generated source code.

Input parameters:

- `job_id` (string, required): Build job ID returned by build_from_conversation.

### `compare_versions` (~83 tokens)

Compare 2ools versions

Compare two saved versions in one project without returning source. Reports lineage, review state, page additions/removals, byte sizes, and SHA-256 identity for each page.

Input parameters:

- `left_version_id` (string, required): Earlier or baseline version ID.
- `project_id` (string, required): Project containing both versions.
- `right_version_id` (string, required): Later or candidate version ID.

### `list_approval_requests` (~56 tokens)

List 2ools approval requests

List exact saved versions waiting for a separately delegated reviewer. Returns project/version identity and attribution, never generated source.

Input parameters:

- `limit` (integer): Maximum approval requests to return.
- `status` (string): Review-request status to return.

### `approve_version` (~89 tokens)

Approve a 2ools version

Use separately delegated review authority to approve one saved version and make it the project's active version. Does not publish, export, or change project permissions.

Input parameters:

- `confirmation` (string, required): Explicit approval confirmation.
- `decision_note` (string): Optional review note stored with the delegated decision.
- `project_id` (string, required): Project containing the candidate version.
- `version_id` (string, required): Saved candidate version to approve.

### `reject_version` (~93 tokens)

Reject a 2ools version

Use separately delegated review authority to reject one saved version. If it is active, restores its saved parent as active; the rejected version remains in immutable history.

Input parameters:

- `confirmation` (string, required): Explicit rejection confirmation.
- `decision_note` (string, required): Review feedback explaining what the next child revision should change.
- `project_id` (string, required): Project containing the candidate version.
- `version_id` (string, required): Saved candidate version to reject.

### `cancel_build` (~58 tokens)

Cancel 2ools build

Cancel a queued or running non-Agent 2ools build. Completed versions are not deleted and terminal builds are left unchanged. Governed Agent execution uses cancel_agent_run.

Input parameters:

- `job_id` (string, required): Build job ID returned by build_from_conversation.

### `list_projects` (~44 tokens)

List 2ools projects

List recent 2ools projects the authenticated account can access, including owned and shared projects. Returns compact metadata without generated source.

Input parameters:

- `limit` (integer): Maximum projects to return.

### `get_project` (~47 tokens)

Get 2ools project

Get a 2ools project's brief, selected pages, active version, and compact version history. Does not return generated source code.

Input parameters:

- `project_id` (string, required): 2ools project ID.

### `get_project_context` (~102 tokens)

Get 2ools project operating context

Read one source-free operating packet before acting: the active version, exact frozen Curator snapshot, revision-safe Rulebook context, review attention, artifact index, work queue, and current activity cursor. Historical Rulebook text is never guessed after its revision changes.

Input parameters:

- `include_governance_text` (boolean): Include exact Rulebook content and policy when the active version still matches the current Rulebook revision.
- `project_id` (string, required): 2ools project ID.

### `render_project_preview` (~83 tokens)

Show 2ools project preview

Render an interactive, read-only card for one saved 2ools version. Use after get_build or get_project when the user wants to see, open, or share the result. Returns protected preview and access-checked workspace links without source code.

Input parameters:

- `project_id` (string, required): Project containing the saved version.
- `version_id` (string, required): Saved version to display.

### `list_project_agents` (~52 tokens)

List project Agents

List the authorizing account's built-in Agents assigned to one readable project. This reveals status and summary, not full Limits or run traces.

Input parameters:

- `project_id` (string, required): Readable 2ools project ID.

### `get_agent` (~70 tokens)

Inspect a governed 2ools Agent

Read one Agent's saved Limits, trigger, immutable revision summaries, and redacted append-only run traces. Raw prompts, tool arguments, credentials, and source bytes are not returned.

Input parameters:

- `agent_id` (string, required): 2ools Agent ID.
- `run_limit` (integer): Maximum recent runs to include.

### `run_project_agent` (~155 tokens)

Run an armed project Agent

Queue real execution for a project-linked Agent the person already test-ran and armed. The immutable saved Limits, project access, account fuse, and online Engine requirement are enforced server-side before a job exists.

Input parameters:

- `agent_id` (string, required): Already-armed 2ools Agent ID.
- `idempotency_key` (string, required): Caller-generated unique key. Reusing it returns the original run instead of starting another.
- `model` (string, required): CLI model available through the account's online Engine.
- `project_id` (string, required): Project this Agent is assigned to.
- `task` (string, required): Concrete task for this run. This cannot widen the Agent's saved tools, folders, network, send, change, or spend authority.

### `cancel_agent_run` (~98 tokens)

Cancel governed Agent run

Stop one queued or running Agent execution and close its durable run history. Completed, failed, stalled, and already-canceled runs keep their terminal truth.

Input parameters:

- `agent_id` (string, required): Agent that owns the run.
- `job_id` (string, required): Agent job ID returned by run_project_agent.
- `project_id` (string, required): Project the Agent run belongs to.
- `run_id` (string, required): Agent run ID returned by run_project_agent.

### `get_project_activity` (~91 tokens)

Get 2ools project activity

Read the attributable project timeline across human work, external MCP agents, builds, versions, feedback, and workspace pins. Actor kind is explicit; an external agent is never presented as the human account that authorized it.

Input parameters:

- `cursor` (string): Opaque next_cursor from a prior response.
- `limit` (integer): Maximum activity items to return.
- `project_id` (string, required): 2ools project ID.

### `wait_for_project_activity` (~126 tokens)

Wait for new 2ools project activity

Wait up to 20 seconds for attributable project events newer than a head_cursor or prior next_cursor. Returns events oldest-first so an outside agent can process them in order. If resync_required is true, paginate get_project_activity instead of advancing the cursor.

Input parameters:

- `after_cursor` (string, required): Opaque head_cursor from get_project_activity or next_cursor from a prior wait.
- `limit` (integer): Maximum new events to return.
- `project_id` (string, required): 2ools project ID.
- `timeout_seconds` (integer): Maximum time to wait before returning timed_out=true.

### `list_project_feedback` (~57 tokens)

List project feedback

Read page-anchored review feedback for versions in a project, with explicit human or external-agent attribution.

Input parameters:

- `include_resolved` (boolean): Include feedback already marked resolved.
- `project_id` (string, required): 2ools project ID.

### `add_project_feedback` (~141 tokens)

Add project feedback

Add an attributable review comment to a saved project version. This does not modify source or approve the version.

Input parameters:

- `comment` (string, required)
- `idempotency_key` (string, required): Caller-generated retry key. Reusing it returns the original feedback item.
- `label` (string)
- `page` (string)
- `project_id` (string, required)
- `reply_to_feedback_id` (string): Root feedback ID to reply to. Replies inherit the root pin position and cannot be nested.
- `version_id` (string, required)
- `x` (number): Horizontal position as a percentage.
- `y` (number): Vertical position as a percentage.

### `resolve_project_feedback` (~46 tokens)

Resolve project feedback

Owner-only review decision that resolves or reopens one saved feedback item.

Input parameters:

- `feedback_id` (string, required)
- `project_id` (string, required)
- `resolved` (boolean)

### `list_project_pins` (~32 tokens)

List workspace pins

Read shared workspace notes and http(s) links, with explicit attribution.

Input parameters:

- `project_id` (string, required)

### `add_project_pin` (~105 tokens)

Add workspace pin

Add an attributable note or safe http(s) link to the shared project workspace.

Input parameters:

- `idempotency_key` (string, required): Caller-generated retry key. Reusing it returns the original pin.
- `kind` (string, required)
- `label` (string)
- `project_id` (string, required)
- `surface` (string)
- `url` (string)
- `version_id` (string)
- `x` (number)
- `y` (number)

### `remove_project_pin` (~38 tokens)

Remove workspace pin

Remove one shared workspace pin. The operation is idempotent.

Input parameters:

- `pin_id` (string, required)
- `project_id` (string, required)

### `prepare_version_export` (~52 tokens)

Prepare portable version export

Create a five-minute download URL for an exact saved version. Source is delivered by the download route, never embedded in MCP model output.

Input parameters:

- `project_id` (string, required)
- `version_id` (string, required)

### `get_version_share_link` (~53 tokens)

Get exact version share link

Read the durable sharing state and current URL for one exact saved version. Disabled shares return no URL.

Input parameters:

- `page` (string)
- `project_id` (string, required)
- `version_id` (string, required)

### `create_version_share_link` (~79 tokens)

Create exact version share link

Create or recover a durable public or code-protected link for one exact saved version. Reusing the idempotency key returns the original result.

Input parameters:

- `access` (string, required)
- `idempotency_key` (string, required)
- `page` (string)
- `project_id` (string, required)
- `version_id` (string, required)

### `revoke_version_share_link` (~61 tokens)

Revoke exact version share link

Disable every existing public or code-protected URL for one exact saved version. Re-publishing a protected link rotates its code.

Input parameters:

- `idempotency_key` (string, required)
- `project_id` (string, required)
- `version_id` (string, required)

### `list_artifacts` (~31 tokens)

List project artifacts

List durable project artifacts and each latest immutable version without returning stored bytes.

Input parameters:

- `project_id` (string, required)

### `get_artifact` (~48 tokens)

Get artifact history

Read one artifact's immutable version history, provenance, attribution, digests, and review states without returning stored bytes.

Input parameters:

- `artifact_id` (string, required)
- `project_id` (string, required)

### `prepare_artifact_upload` (~136 tokens)

Prepare reviewed artifact upload

Create a five-minute PUT URL for exact bytes. External-agent output always enters pending review and never replaces the current artifact version before approval.

Input parameters:

- `artifact_id` (string): Existing artifact to version. Omit when creating a new artifact.
- `byte_size` (integer, required)
- `filename` (string, required)
- `kind` (string, required)
- `media_type` (string, required)
- `name` (string, required)
- `parent_version_id` (string): Required latest version id when updating an existing artifact.
- `project_id` (string, required)
- `review_note` (string)
- `sha256` (string, required)

### `prepare_artifact_download` (~55 tokens)

Prepare exact artifact download

Create a five-minute download URL for one immutable artifact version. Stored bytes never enter MCP model output.

Input parameters:

- `artifact_id` (string, required)
- `artifact_version_id` (string, required)
- `project_id` (string, required)

### `list_artifact_approval_requests` (~46 tokens)

List artifact review requests

List exact artifact versions awaiting or carrying a human review decision. Requires separately delegated artifact review authority.

Input parameters:

- `project_id` (string)
- `status` (string)

### `approve_artifact_version` (~47 tokens)

Approve exact artifact version

Approve one pending immutable artifact version and make it current. Repeating the same decision is idempotent.

Input parameters:

- `note` (string)
- `request_id` (string, required)

### `reject_artifact_version` (~45 tokens)

Request artifact changes

Reject one pending immutable artifact version with useful feedback. Repeating the same decision is idempotent.

Input parameters:

- `note` (string, required)
- `request_id` (string, required)

### `list_work_assignments` (~42 tokens)

List project work assignments

List durable project work contracts, bounded attempts, leases, budgets, and result references.

Input parameters:

- `project_id` (string, required)
- `status` (string)

### `create_work_assignment` (~109 tokens)

Create bounded project work

Create a durable assignment with acceptance criteria and hard step, time, and spend ceilings.

Input parameters:

- `acceptance_criteria` (array)
- `brief` (string, required)
- `due_at` (string)
- `idempotency_key` (string, required)
- `max_minutes` (integer)
- `max_spend_cents` (integer)
- `max_steps` (integer)
- `priority` (string)
- `project_id` (string, required)
- `title` (string, required)

### `claim_work_assignment` (~54 tokens)

Claim bounded project work

Atomically claim one open assignment and receive a five-minute renewable lease plus an immutable budget snapshot.

Input parameters:

- `assignment_id` (string, required)
- `idempotency_key` (string, required)
- `input_refs` (array)

### `heartbeat_work_session` (~55 tokens)

Renew a work-session lease

Renew the authenticated worker's active lease without widening its immutable step, time, or spend ceilings.

Input parameters:

- `session_id` (string, required)
- `used_spend_cents` (integer)
- `used_steps` (integer)

### `submit_work_session` (~79 tokens)

Submit work for review

End the authenticated worker's lease and submit typed result references for a separate review decision.

Input parameters:

- `idempotency_key` (string, required)
- `output_refs` (array)
- `result_summary` (string, required)
- `session_id` (string, required)
- `used_spend_cents` (integer)
- `used_steps` (integer)

### `decide_work_assignment` (~58 tokens)

Review submitted project work

Complete submitted work or reopen it with useful feedback. Requires separately delegated work-review authority.

Input parameters:

- `assignment_id` (string, required)
- `decision` (string, required)
- `idempotency_key` (string, required)
- `note` (string)

## Diagnostics

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

## Score history

- 2026-08-03: 68
- 2026-08-02: 67
- 2026-08-01: 67
- 2026-07-31: 65
- 2026-07-30: 59
- 2026-07-28: 64
- 2026-07-27: 64

## Links

- Remote endpoint: https://2ools.app/mcp
- Website: https://2ools.app/connect-ai
- Changelog RSS feed: https://verifymcp.io/servers/app-2ools-mcp/2ools/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-2ools-mcp/2ools/changelog.json
- HTML version of this page: https://verifymcp.io/servers/app-2ools-mcp/2ools
