TeamOnly
Deploy and manage company-only internal apps from an MCP client.
Read app-writing rules for the TeamOnly stack before coding.
Initialize a new app, use a template, or add TeamOnly to an existing app.
Deploy the app behind your company login.
Check who is signed in, the plan, and deployed apps.
Watch live app requests, logs, and errors for debugging.
Control who can open the app and assign in-app roles.
Save secrets for the deployed app.
Sign in by work email with a 6-digit code.
Start a 14-day free trial or subscribe to a paid plan.
Delete an app and its data when explicitly confirmed.
Enables deploying apps as Cloudflare Workers with D1 databases via TeamOnly, including app initialization, deployment, live logs, access control, roles, and secrets management.
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, and can read and add rows in Google Sheets your team shares with it. 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 mcpCursor: 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 |
| 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. |
| Starts an app in an empty folder (or from a template), or adds TeamOnly to an app you already have. |
| Builds the app and puts it online behind your company login. |
| Lists the app's versions: when, who deployed each, and which is live. |
| Puts the previous version (or a chosen one) back live in seconds. |
| Downloads a deployed app's code into a new folder, so you can change an app whose code isn't on your computer. Owner or admin. |
| Who is signed in, the plan, and every app with who can open it. |
| Watches the live app's requests, |
| Who can open the app: everyone at the company, or a list of people. |
| Roles people have inside the app, like approver or finance. |
| Saves an API key or password for the app. |
| Signs in with a work email and the 6-digit code TeamOnly emails. |
| Starts the free 14-day trial for a company new to TeamOnly. |
| Returns a payment link for a paid plan. |
| 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 toolsaccessWho 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.
Inputs: action, emails, directory.
delete_appDelete the appADestructive
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".
Inputs: confirm (required), directory.
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).
Inputs: directory.
get_app_rulesHow to write a TeamOnly appARead-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.
Inputs: no named parameters.
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.
Inputs: template, directory.
logsWatch the live appARead-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.
Inputs: seconds, directory.
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.
Inputs: role, action, emails, directory.
set_secretSave a secretAIdempotent
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.
Inputs: name (required), value (required), directory.
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.
Inputs: code, email.
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).
Inputs: company.
statusWho is signed in, plan and appsARead-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.
Inputs: no named parameters.
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).
Inputs: plan (required), company.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
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.
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.
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.
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.
Related MCP Connectors
Deploy, share and run the Apps you build with AI, private to the people you invite.
Host apps built with AI: deploy to a live HTTPS URL, custom domains, secrets and backups.
Deploy and host the apps your AI assistant builds — a real server, database, and shareable URL.
Deploy apps from GitHub, read build/runtime logs, and manage your app's users from your AI agent.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceDeploy, manage, and scale applications directly from your AI assistant.8-
- FlicenseNot gradedqualityCmaintenanceDeploy full-stack apps from AI. 75+ tools: GitHub/Docker deploy, databases, environments, security, billing.3-
- AlicenseNot gradedqualityBmaintenanceAppCrane 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 a7AGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables 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