Skip to main content
Glama

TeamOnly MCP server

Deploy the internal apps you build with AI behind your company login, from Claude Code, Cursor, Claude Desktop, VS Code, Windsurf or any MCP client.

Say "deploy this on TeamOnly" and your agent puts the app online at https://<app>.<company>.teamonly.app. Only people with an email at your company can open it: they sign in with their work Google or Microsoft account, or a code sent to their work email. The app gets its own database, file storage and secrets. Free for 14 days, no card.

Website: teamonly.dev/mcp · npm: teamonly · MCP Registry: dev.teamonly/teamonly

Install

The server is part of the teamonly npm package and runs on your computer (deploying reads your project's files). It needs Node.js 20 or newer (22 for logs).

Claude Code

claude mcp add teamonly -- npx -y teamonly mcp

Cursor: Add to Cursor, or put this in ~/.cursor/mcp.json. Claude Desktop (claude_desktop_config.json) and Windsurf take the same:

{
  "mcpServers": {
    "teamonly": { "command": "npx", "args": ["-y", "teamonly", "mcp"] }
  }
}

VS Code

code --add-mcp '{"name":"teamonly","command":"npx","args":["-y","teamonly","mcp"]}'

Related MCP server: CreateOS MCP

Tools

Tool

What it does

get_app_rules

The rules for an app that deploys: React + Vite front end, Hono API on one Cloudflare Worker, D1 database, and how to read the signed-in person. The agent reads this before writing code.

init

Starts an app in an empty folder (or from a template), or adds TeamOnly to an app you already have.

deploy

Builds the app and puts it online behind your company login.

status

Who is signed in, the plan, and every app with who can open it.

logs

Watches the live app's requests, console.log output and errors for 5 to 60 seconds.

access

Who can open the app: everyone at the company, or a list of people.

roles

Roles people have inside the app, like approver or finance.

set_secret

Saves an API key or password for the app.

sign_in

Signs in with a work email and the 6-digit code TeamOnly emails.

start_trial

Starts the free 14-day trial for a company new to TeamOnly.

subscribe

Returns a payment link for a paid plan.

delete_app

Deletes the app and its data. Needs the app name to confirm.

How sign-in works

There are no API keys to paste. The agent asks for your work email, calls sign_in, and asks you for the code from the email. If your company is new to TeamOnly it offers the free trial. The sign-in is saved on your computer in ~/.teamonly, shared with the npx teamonly command line tool.

Example

Build a tool where people submit expenses and their manager approves them. Deploy it on TeamOnly so only people at our company can open it.

Templates

Five ready-made internal tools (expense approval, customer lookup, inventory tracker, request form, ask the docs): sohelsd/teamonly-templates.

Source

src/mcp.ts is the server. It ships inside the teamonly npm package next to the command line tool it runs: each tool call runs the matching teamonly command without a terminal and returns its output, so the MCP tools and the CLI always behave the same. This copy is updated with each release. The Dockerfile runs the published package.

License

This repository is MIT licensed. The teamonly npm package it runs has its own license.

Support

Email hello@teamonly.dev.

Available Tools

12 tools
accessWho can open the appB

Shows or changes who can open the app. "show" (default), "everyone" (everyone at the company), "only" (only these people and the owner), "add" or "remove" people on that list.

NameRequiredDescriptionDefault
actionNoWhat to do
emailsNoWork email addresses
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint; they do not declare readOnly or destructive behavior. The description signals that this tool can change access and enumerates add/remove modes, but it omits permission requirements, reversibility, immediate effect, and other mutation side effects, leaving a significant gap for an access-control mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences, front-loads purpose, then maps the action values without repetition. Every phrase contributes to selecting the right action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully described schema and no output schema, the description covers the core use and action modes. However, for a tool that can change app access, it does not state authorization requirements or the consequences of changing the list, leaving meaningful context gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds real meaning for the action enum: show is default, everyone means company-wide, only means named people plus owner, and add/remove operate on that list, which is more than the schema's 'What to do'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

It states a specific resource and pair of operations ('Shows or changes who can open the app') and enumerates the action modes. It does not name or differentiate from siblings such as roles or get_app_rules, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains what each action value does, including show as default and the difference between everyone and only. It gives no explicit when-to-use/when-not guidance versus sibling tools, so the agent must infer tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_appDelete the appA
Destructive

Deletes the live app with its database, files and secrets. It cannot be undone. Only call this when the person asked for it, and pass the app name (from teamonly.json) as "confirm".

NameRequiredDescriptionDefault
confirmYesThe app name, to confirm
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint and openWorldHint, yet the description adds high-value specifics: exactly what gets destroyed (database, files, secrets), that it is irreversible, and that human intent must be confirmed first. That is real disclosure beyond the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct load: consequence, irreversibility, invocation gate. The blast-radius statement is front-loaded where an agent will see it first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-param tool with no output schema, the description covers consequence, irreversibility, and the confirmation contract. It does not state what happens if the app is absent or how the directory parameter interacts with app resolution, but those are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds a semantic constraint the schema omits: the confirm value must be the app name sourced from teamonly.json. That turns a generic string param into a verified identity check.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Deletes the live app') and immediately scopes the blast radius ('with its database, files and secrets'). No sibling tool competes with this operation, and the destructive scope is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition — 'Only call this when the person asked for it' — plus how to satisfy the confirmation parameter. No alternatives are named, but among the siblings none performs a delete, so there is little to disambiguate against.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deployDeploy the appA

Builds the app in "directory" and puts it online at https://..teamonly.app, behind the company login. Takes up to a minute. If the person is not signed in, the result says what to do (use sign_in).

NameRequiredDescriptionDefault
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint, so the description does the behavioral work: it discloses the expected duration (up to a minute), the required company login, and that a not-signed-in result carries a remediation pointer. It omits what happens to a prior deployment or what a failure result looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what happens and where it lands, then timing, then the failure path. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description responsibly sketches the result shape for the auth failure case, but says nothing about success output or partial-failure behaviour. Adequate for a single-parameter deploy tool with slight gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents the single directory parameter fully (absolute path, the teamonly.json marker, default behaviour), at 100% coverage. The description only names the parameter in passing and adds no meaning beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (builds) plus the concrete effect (puts it online at a templated URL) and the access model (behind the company login). An agent can tell this apart from status, logs, or delete_app without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the not-signed-in case to the sign_in sibling, which is real conditional guidance. It does not say when NOT to deploy (e.g. after incomplete setup, or when a deploy is already running), so it falls short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_app_rulesHow to write a TeamOnly appA
Read-only

The rules for writing an app that deploys on TeamOnly: the supported stack, how to read the signed-in person, the database, files, secrets, email to coworkers, scheduled jobs and roles. Read this before writing or changing app code.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read. The description adds real value beyond that by disclosing the subject matter of the returned content, so the agent knows what questions the document can answer. It does not describe the return shape (single document? sections?) or length, which keeps it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence plus a one-clause imperative, with the purpose front-loaded and the topic list serving the concrete job of telling the agent what it can learn. Nothing is repeated from the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only documentation fetch with no output schema, the description supplies everything needed to decide and call: what it returns, what it covers, and when to invoke it. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. The description correctly implies a parameterless call by framing the tool as a document to be read rather than a query.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the rules for writing a TeamOnly app) and enumerates the topics covered — supported stack, signed-in person, database, files, secrets, email, scheduled jobs, roles. That enumeration makes it unmistakable against siblings like deploy, init, or roles, which each cover one narrow slice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Read this before writing or changing app code" gives a clear triggering condition and implicitly sequences it ahead of init/deploy. It stops short of stating when not to call it (e.g. when only inspecting a deployed app) or naming siblings as alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

initSet up a folder for TeamOnlyA

In an empty folder, creates a starter app (or a ready-made one with "template"). In a folder with an existing app, adds teamonly.json and the TeamOnly instructions for Claude Code, Cursor and other AI tools. Leave "template" out to see the template list in the result.

NameRequiredDescriptionDefault
templateNoOptional: expense-approval, customer-lookup, inventory-tracker, request-form or ask-the-docs
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose the key side effects: file/app creation in an empty folder and, notably, mutation of an existing project by adding teamonly.json and tool-specific instruction files. It does not say whether existing files are overwritten, whether the operation is idempotent, or whether auth/trial state is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the primary empty-folder behavior, then the existing-app behavior, then the template-list affordance. Nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating setup tool with no annotations and no output schema, the description covers what gets created but omits prerequisites (the sibling tools sign_in/start_trial/subscribe suggest an account or trial gate) and what the success/failure result looks like. Adequate but with a material gap for a first-run bootstrap command.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: leaving 'template' out is a discovery mode that lists available templates, and the 'template' values named in the description correspond to the schema's list. It adds little for 'directory' beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('creates a starter app') and covers the second mode ('adds teamonly.json and the TeamOnly instructions'), which cleanly separates it from siblings like get_app_rules or deploy. It never names a sibling to contrast with, so differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage conditions based on folder state: empty folder vs. a folder with an existing app, and notes that omitting 'template' returns the template list. It does not say where this fits in the overall flow (e.g., before deploy, or whether sign_in/start_trial is required first).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logsWatch the live appA
Read-only

Collects the live app's requests, console.log output and errors for a few seconds and returns them. Ask the person to open the app (or trigger the problem) while it runs.

NameRequiredDescriptionDefault
secondsNoHow long to watch, 5 to 60 seconds (default 20)
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true is consistent with a passive capture tool. The description adds genuinely useful behavior the annotations don't cover: capture is time-boxed to a few seconds and requires the user to interact with the app during the window, which shapes how an agent should sequence the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what is captured and returned, followed by the one operational instruction that matters. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the three categories of returned data. It leaves out volume/truncation behavior and whether an empty capture is possible, minor gaps for a read-only capture tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented with defaults and ranges. The description only hints at the duration via 'a few seconds' and says nothing extra about the directory/workspace scoping, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('collects') and enumerates the resource contents (requests, console.log output, errors) plus the time-bounded scope. It clearly is not get_app_rules or status, though it never names a sibling to contrast with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable operational context: ask the person to open the app or trigger the problem while it runs, and that it only captures a few seconds. It stops short of saying when to prefer another diagnostic tool such as get_app_rules or status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rolesRoles inside the appB

Shows or changes the roles people have inside the app (the app reads them as ctx.user.roles), such as approver or finance. "show" (default), "add" or "remove" a role for some people.

NameRequiredDescriptionDefault
roleNoRole name, e.g. approver
actionNoWhat to do
emailsNoWork email addresses
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that add and remove change roles for people, which is useful beyond the sparse openWorldHint annotation. But with no readOnlyHint or destructiveHint available, it does not describe permission requirements, reversibility, side effects on existing role assignments, or what happens when changing roles.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, stating the tool's purpose before the action details. Every sentence contributes, though the second sentence is somewhat compressed and could be clearer about how add/remove relate to emails.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with no output schema and sparse annotations, the description covers the core action semantics but does not explain what "show" returns, what form the role data takes, or what confirmation or effects occur after add/remove. It is adequate but leaves meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the parameters. The description adds a small amount of meaning by clarifying the default action and giving role examples, but it does not explain the directory or emails parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it shows or changes the roles people have inside the app, with examples like approver and finance. It does not explicitly distinguish itself from sibling tools such as access or get_app_rules, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the available actions and notes that "show" is the default, which implies how to use the tool. However, it does not say when to choose this tool over alternatives like access or get_app_rules, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_secretSave a secretA
Idempotent

Saves a secret (API key, password) for the deployed app. The app reads it with ctx.secrets.get(NAME). Names are UPPER_SNAKE_CASE. Ask the person for the value; never put it in code.

NameRequiredDescriptionDefault
nameYese.g. OPENAI_API_KEY
valueYesThe secret value
directoryNoAbsolute path of the app's folder (the one with teamonly.json). Defaults to the folder the server started in.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint and idempotentHint, so the description's added value is the consumption path (ctx.secrets.get(NAME)) and the naming convention, both useful context. It stops short of saying what happens when a name already exists (overwrite vs. error) or whether a redeploy is needed for a running app to pick up the new value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: what it does, how the app reads the value, the naming rule, and the security instruction. The core action is front-loaded with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter tool with no output schema, the description covers purpose, naming, consumption, and the sourcing rule. The remaining gap is lifecycle behavior: whether the secret is available to an already-running deployment or requires a redeploy, and what happens on a name collision.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a normative constraint the schema lacks: names must be UPPER_SNAKE_CASE, not merely exemplified as OPENAI_API_KEY. It says nothing extra about the directory parameter beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (saves a secret) with concrete examples of what a secret is (API key, password) and the scope (for the deployed app). No sibling tool covers secrets, so there is nothing to disambiguate against, and an agent can act on this immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operational guidance: ask the person for the value and never hardcode it in code, which tells the agent how to source the input rather than guessing. It does not name alternatives or when-not-to-use, but no sibling covers this capability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_inSign in with a work emailA

Signs in to TeamOnly on this computer. Call it with "email" first: TeamOnly emails that address a 6-digit code. Ask the person for the code, then call again with "code". If their company is new, the result says so; then use start_trial.

NameRequiredDescriptionDefault
codeNoThe 6-digit code from the email
emailNoWork email address

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide openWorldHint=true, so the description carries most of the behavioral burden. It discloses the key side effect, that TeamOnly emails a 6-digit code, and explains the two-step interaction and new-company branch, though it does not mention code expiry or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the tool's action and the required first step, followed by the follow-up step and the start_trial branch. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter sign-in tool with no output schema, the description covers the full interaction flow and the new-company fallback. It does not describe what a successful result looks like or how long codes last, which are minor omissions for this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the schema documents both parameters. The description adds real meaning beyond the schema by explaining that "email" must be supplied first, that "code" arrives by email, and that the second call uses that code.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it signs the user in to TeamOnly on this computer. It also distinguishes the two-step email/code flow and points to start_trial for new companies, so an agent can tell it apart from the onboarding sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit call sequence: call first with "email", ask the person for the emailed 6-digit code, then call again with "code". It also states when to switch to start_trial when the company is new, which is exactly the kind of when-to-use guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_trialStart a free 14-day trialA

For a company that doesn't have TeamOnly yet, after sign_in verified the email: starts a free 14-day trial (one builder, up to 3 apps, no card).

NameRequiredDescriptionDefault
companyNoThe company's name

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry openWorldHint=true, so the description bears most of the disclosure burden. It does add valuable terms: 14-day duration, 1 builder, 3 apps, no card required. But it omits what the call returns, whether it is idempotent or errors on an existing trial, and what happens when the trial expires, which matters for a creation/mutation operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence that front-loads the eligibility precondition before the action, with zero filler. Every clause (eligibility, prior sign-in, trial terms) carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should indicate what the agent gets back or what state changes on success/failure. It covers eligibility and trial terms well but leaves return value and post-call state unaddressed, so it is adequate rather than complete for a state-creating tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('The company's name'), so the schema already does the work. The description only implies the company must not already have TeamOnly, adding a precondition rather than new meaning about the parameter itself, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('starts a free 14-day trial') and spells out the resulting entitlements (one builder, up to 3 apps, no card). It also names the precondition (company without TeamOnly, after sign_in verified the email), so an agent can distinguish it from subscribe. It does not explicitly contrast with the subscribe sibling, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger condition: only for a company that doesn't have TeamOnly yet, and only after sign_in has verified the email. This effectively routes the agent away from the paid-subscription path, though the alternative (subscribe) is not named explicitly and no exclusions or repeat-call behavior are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusWho is signed in, plan and appsA
Read-only

Shows who is signed in to TeamOnly on this computer, the company and plan (with free trial days left), and every app with its address, who can open it and when it was last deployed.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes the safe-read profile, so the description's added value is scope and content: it explicitly says 'on this computer', so the agent knows this is local-machine state, not account-wide cloud data. It also discloses the payload fields, which is meaningful since there is no output schema. It stops short of noting whether multiple accounts or a signed-out state are possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the primary answer (who is signed in) front-loaded, followed by plan and app details. Every clause maps to a returned data category, so nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of documenting return values, and it covers all three groups (user, plan, apps) with their sub-fields. Annotations handle the safety profile. The only gap is edge-state behavior, such as what is returned when nobody is signed in or no apps exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies; the description correctly implies no inputs are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Shows') and enumerates exactly what is reported: signed-in user, company/plan with trial days, and per-app address, access, and last deploy time. This inventory of contents makes it clearly distinct from siblings like logs, get_app_rules, access, or subscribe without needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not guidance and no named alternative. Usage is only implied by the phrase 'on this computer', which suggests a local environment check rather than a remote lookup, leaving the agent to infer the trigger condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscribePick a paid planA

Starts paying for TeamOnly (also ends a free trial): opens a payment page in the person's browser and returns its link. The person pays there; call subscribe again afterwards to finish. Plans: builder ($19/mo, one builder, 3 apps), team ($249/mo, unlimited apps and builders), business ($899/mo, adds SSO and audit logs).

NameRequiredDescriptionDefault
planYesPlan
companyNoThe company's name

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry openWorldHint=true, so the description bears the burden and delivers: it discloses that an external browser page is opened, that payment happens outside the tool, that a link is returned, and that the operation is two-phase and non-idempotent. This is exactly the non-obvious behavior an agent needs before invoking a billing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each load-bearing: what it does, how the two-step flow works, and the plan menu. The critical behavioral fact (opens a payment page, call again to finish) is front-loaded before the pricing detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly states the return value (a payment link) and explains the resumption call. It omits edge cases such as what happens when a subscription already exists or whether the second call needs the same plan/company, which matters for a billing mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but the schema descriptions are bare ("Plan", "The company's name"), so the description adds real value by mapping each enum value to price, seat count, and included features. The optional company parameter is never mentioned, leaving one small gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Starts paying for TeamOnly") plus the immediate side effect ("also ends a free trial"), which cleanly distinguishes it from the sibling start_trial. An agent can tell what this does and what it is not without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit sequencing rule that would otherwise cause failure: "The person pays there; call subscribe again afterwards to finish." The parenthetical about ending a free trial implies the relationship to start_trial, but it never names that sibling as the alternative, so it falls short of a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.6.0
    • First observedaccess
    • First observeddelete_app
    • First observeddeploy
    • First observedget_app_rules
    • First observedinit
    • First observedlogs
    • First observedroles
    • First observedset_secret
    • First observedsign_in
    • First observedstart_trial
    • First observedstatus
    • First observedsubscribe

TDQS

A3.9/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct action or resource: app setup, deployment, logs, access control, roles, secrets, authentication, billing, and deletion. Potentially similar pairs like get_app_rules vs init and access vs roles are clearly separated by their descriptions.

Naming Consistency3/5

The names consistently use snake_case, but the naming convention itself mixes bare verbs (deploy, init, subscribe), noun-only names (status, logs, access, roles), and verb_noun forms (get_app_rules, set_secret, sign_in). It remains readable, but there is no predictable pattern.

Tool Count5/5

Twelve tools is well-scoped for a platform covering app creation, deployment, logs, access, roles, secrets, authentication, billing, and deletion. Each tool has a clear role in the workflow and the set does not feel bloated.

Completeness4/5

The surface covers the core app lifecycle: init/create, deploy, status, logs, access, roles, secrets, sign-in, trial/subscription, and delete. Minor gaps remain, such as listing or deleting secrets, cancelling a subscription, and pausing or updating an app beyond redeploying.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    AppCrane is the self-hosted home for the apps your AI builds and your AI deploys. It exposes 35 appcrane_* MCP tools so any MCP client (Claude Code, Cursor, Codex) can run the full deploy lifecycle — create app, deploy to sandbox/production, manage secrets, stream logs, list releases, roll back — every action bound to a user and audit-logged. Enterprise SSO (SAML/OIDC/SCIM), Docker isolation per a
    7
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to build, deploy, and inspect apps through a hosted backend service, including reading platform docs, deploying raw source, inspecting logs, verifying live pages in browsers, and managing project tasks.
    MIT