Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
tasklite.net: hosted backend, REST API and admin for apps built by AI agents
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Funciona en Claude para web, escritorio y móvil:
https://mcp.tasklite.net/mcpAbre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"tasklite": {
"command": "npx",
"args": [
"-y",
"@tasklite/mcp"
]
}
}
}Ejecuta esto en tu terminal
claude mcp add --transport http tasklite https://mcp.tasklite.net/mcpclaude mcp add tasklite -- npx -y @tasklite/mcpPégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"tasklite": {
"url": "https://mcp.tasklite.net/mcp"
}
}
}Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"tasklite": {
"command": "npx",
"args": [
"-y",
"@tasklite/mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"tasklite": {
"type": "http",
"url": "https://mcp.tasklite.net/mcp"
}
}
}Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"tasklite": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@tasklite/mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
ChatGPT solo se conecta a servidores en internet:
https://mcp.tasklite.net/mcpLos nombres de los menús pueden variar un poco según el plan y con el tiempo.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Nombres y descripciones de las herramientas tal como los informó el servidor el 9 nov 2026. Los escribió el creador, no nosotros; los mostramos como texto sin formato.
list_organizationsList the organizations the authenticated user belongs to. Use the returned id as organizationId in other tools.
get_email_usageHow much of the monthly email quota an organization has used: emails sent this month, emails waiting in the queue, the plan limit (Free 300, Plus 3000, Pro 20000; null means unlimited), whether the plan allows marketing email, and whether sending is paused for the organization (t
configure_external_accessRead or change how EXTERNAL users (people who sign up to your app through TaskLite auth) get into an organization. This policy governs sign-up by email and password and by Google. Sign-in by a phone code (POST /auth/otp/send, then /auth/otp/verify) obeys only "invite": under "clo
list_projectsList projects in an organization. The API returns 50 per page, an organization with more than that needs page 2 and beyond, so check the returned total before assuming a project does not exist.
list_boardsList the boards inside a project, id, name, description. Every other board tool needs a boardId, and this is the only way to discover one without being handed a URL.
create_projectCreate a project (a business process container). Boards with data live inside projects.
create_boardCreate a board (a data table) inside a project. Add typed columns with create_column afterwards. kind: "tasks" (default) also gives the board the built-in task columns, status, priority, assignee, due date, tags, for work people track; "data" creates a plain table with only the c
create_columnAdd a typed column to a board. Valid types: text, rich_text, number, status, date, datetime, duration, people, checkbox, dropdown, label, priority, link, email, phone, relation, lookup, rollup, formula, rating, currency, file. Choose by meaning, date for dates, phone for phones,
get_board_schemaGet a board with its full column schema (ids, names, types, settings). Call this before creating items with cells.
update_boardRename a board or change its description. Structure (columns) is changed with update_column / delete_column / reorder_columns.
delete_boardDelete a board with every item on it. Destructive and not undoable, confirm with the user first, and prefer delete_column when only part of the model is wrong.
delete_projectDelete a project with every board, column and row inside it. Destructive: confirm with the user first, and name the project in the confirmation. The project goes to the organization recycle bin, so it can be restored from the admin until it is emptied.
update_columnChange a column after the fact: rename it, change its type (e.g. number -> currency), replace settings (dropdown options), or set isRequired / isHidden. A type change converts existing values (number↔currency, text→number/date/checkbox, anything→text) and clears the ones that can
delete_columnDelete a column and every value stored in it. Destructive, confirm with the user first. Use update_column when the column is right but its name, type or options are wrong.
reorder_columnsSet the display order of a board's columns. Pass every column id in the wanted order (get_board_schema lists them).
export_projectThe whole project as JSON, boards, columns with settings, items with their cells keyed by column id. For migrations, backups and reading a system back. Items are capped per board for the model's sake; the REST endpoint GET /organizations/{orgId}/projects/{projectId}/export.json r
query_itemsList items (rows) of a board, including their cell values. Returns all items unless limit/page are given (the API defaults to 50 per page when unpaged, so the tool pages through and concatenates). Narrow the result with search, status, priority and sort instead of fetching everyt
create_itemCreate an item (row) with all of its data in one call. cells maps columnId -> value (use get_board_schema for column ids); every cell is saved with the row. Use set_cell only for later edits.
update_itemUpdate item fields (title, description, status, priority, dueDate, tags). On a data board the task fields (status, priority, dueDate, tags) are hidden: its columns, status included, are set with set_cell.
set_cellSet a single cell value on an item by columnId.
get_cellsRead cells of one item from the database (not a cache): one current value per column, the value set_cells_if_unchanged compares. Use it to decide a conditional write, and pass each value back as `expected` exactly as it came.
set_cells_if_unchangedCompare-and-set on cells of one item, all or none. Each cell carries the value you read (`expected`, null = empty) and the value to write. If any cell no longer holds its `expected`, nothing is written and the answer is an error with code CELL_CONFLICT and `conflicts` [{columnId,
delete_itemDelete an item. Destructive, confirm with the user before calling.
list_commentsList the comments (the correspondence thread) on an item, oldest first. Each comment includes its author and any @mentions. Needs projectId and itemId (get itemId from query_items).
add_commentPost a comment on an item's thread. To notify people, pass their user ids in mentionedUserIds (each also appears as an @mention). attachmentIds references already-uploaded files. Needs projectId and itemId.
update_commentEdit the text of an existing comment. Only the author can edit their comment. Needs projectId, itemId and the commentId.
delete_commentDelete a comment from an item thread. Destructive, confirm with the user before calling. Needs projectId, itemId and the commentId.
request_file_uploadCreate a link that puts files onto an item from outside TaskLite: the customer's photos, a signed contract, a logo, a build zip. Returns an address like https://app.tasklite.net/upload/ that anyone you hand it to can use with no account, no login and no API key; pass clientEmail
list_uploaded_filesThe files attached to an item, including everything that came in through a request_file_upload link, each with a download URL that is signed and short lived (mint a fresh one by calling again). Also lists the upload links on the item and how many files each has taken, which is ho
create_signature_requestSend a PDF for electronic signature and get the signing links back. One call: the PDF (an attachment already on an item, see list_uploaded_files / request_file_upload, or the bytes as base64), the signers, and optionally the row it belongs to. Each signer opens a personal link wi
list_signature_requestsDocuments sent for signature, newest first, with each signer's state (sent, viewed, signed, declined). Filter by the row they belong to or by status (out_for_signature, completed, declined, voided, expired, failed).
get_signature_requestOne document sent for signature: status, signers and their state, and when complete a short-lived download URL of the signed PDF (with its evidence page).
signature_linkA fresh signing link for one signer whose turn it is, to open on the spot (the agent's phone) or to send yourself. Their previous link stops working.
void_signature_requestCancel a document that is out for signature: every link stops working. A completed document cannot be voided.
list_telephony_providersRead-only. List the phone systems (PBX providers) an app can be connected to, what each can do (call log, live calls, recordings, click-to-call), and which fields it needs: public settings such as the server address go to start_telephony_connection, secret fields (the API token)
get_telephony_connectionRead-only. The phone system connection of an app: provider, status (pending = link made and no token typed yet, connected, error), the public settings, whether a token is stored (never the token), the board mapping, the last sync result and the last error. connection is null when
start_telephony_connectionStart connecting an app to a phone system (PBX) and get the one-time link the CUSTOMER opens to type the API token themselves. The token never passes through the chat, you or the logs: do not ask for it, do not accept it pasted. Send the link to the customer as is. It works once,
test_telephony_connectionCheck the stored token against the customer's phone system: a one-day call log read. Answers { ok, message } with a Hebrew message that can be shown to the customer as is, and records the result on the connection. It only reads from the PBX. Owner or admin of the app.
configure_telephony_mappingSay where the calls go: the board that receives one row per call, which column gets which call field, and, optionally, how a call is linked to a customer (by the other party's phone number, Israeli numbers compared in one normal form: 05x, +9725x, 9725x) and to an employee (by th
preview_telephony_syncRead-only for TaskLite: reads the call log from the customer's PBX for a range and shows what a sync would write, without writing anything or moving the sync position. Returns counts (fetched, already on the board) and the last 20 calls as board rows (title, cells by column id, t
run_telephony_syncSync now: read the call log from the PBX and write each new call as a row on the mapped board, as the signed-in user, through the board's normal path (so the board's automations run for every new row). Safe to repeat: a call already written is never written twice (deduped by the
disconnect_telephonyRemove the phone system connection of an app: the stored token, the mapping and the record of which calls were written are deleted, and syncing stops. Rows already written to the board stay. Reconnecting later starts from start_telephony_connection and may write the recent calls
revoke_upload_linkClose an upload link before it expires, so the address stops accepting files. The files already uploaded stay on the item. Use it as soon as the material is in, because until then anyone holding the link can add more.
create_appCreate an app, a named API surface over the boards of a project, for an external frontend. Then add endpoints and an API key.
push_statusWhether an app can send push notifications to phones, and how many devices are registered. Push goes out through the customer's OWN Firebase project, so it has to be configured once per app before send_push automations do anything. This tool never returns the key.
send_test_pushSend one real push notification to the given app users, to prove the chain works before an automation depends on it. Confirm with the user first: this reaches actual phones.
publish_appPublish an app, required before its API endpoints accept external calls.
create_app_endpointExpose a board as a REST endpoint of an app: /apps/{appSlug}/api/{slug}. exposedColumns limits which columns are readable/writable. rowLevelSecurity.enabled makes the endpoint per-user: the developer's server sends `X-App-User: ` next to the API key, and the endpoint returns, upd
list_app_endpointsList an app's REST endpoints, slug, board, allowed methods, and how many columns each exposes. An endpoint exposing 0 columns is broken: it returns only item metadata and silently discards writes.
update_app_endpointChange an existing endpoint, most often to set exposedColumns on one that was created without them. Get the endpoint id from list_app_endpoints and the column ids from get_board_schema.
delete_app_endpointDelete an endpoint of an app for good: /apps/{appSlug}/api/{slug} stops answering at once and the endpoint cannot be brought back (create it again with create_app_endpoint). The board and its rows are not touched. Confirm with the user first: a frontend that calls this endpoint b
configure_app_settingsRead or change the settings object of an app. Call with only appId to read. To change, pass set: the keys in it are MERGED into the current settings (objects merge key by key at every depth, arrays and plain values replace, null removes a key). The server itself does not merge: P
list_app_usersList the people of an app, as { users, pending }. users: everyone who ever called it with X-App-User or signed in to it with a code. Each has userId (the id set_app_user_role, remove_app_user, link_app_user, list_app_user_links and send_test_push take), externalId (the developer'
add_app_userGive a person access to an app by their phone number: the phone and a role, nothing else. This is how the people who run an app (the business owner, a manager, staff) get into its admin screen, whose endpoints are in row-level security mode "shared". The person needs no invite co
set_app_user_roleChange what an existing user of an app may do, or switch them off or back on. Takes the userId from list_app_users and at least one of role and isActive. It also puts on the app's access list a user who is not on it yet (hasAccessRow false in list_app_users), which is what an end
remove_app_userTake a person's access to an app away. Pass exactly one of two ids from list_app_users: userId, for someone who already signed in, switches them off (the same as set_app_user_role with isActive false: their calls are refused in every mode, nothing of theirs is deleted, and set_ap
create_app_inviteCreate an invite code for an app (8 characters shown as XXXX-XXXX, typed without regard to case or the dash). The person signs up or signs in through the app with the code: the app sends it as inviteCode with POST /auth/otp/verify, /auth/register-external or /auth/google-external
list_app_invitesList the invite codes of an app, newest first (the latest 200): the ones created with create_app_invite and the ones the app's own users minted through a relation endpoint with allowInvites (createdVia admin or app). Each carries id, code, itemId, role, label, maxUses, useCount,
revoke_app_inviteRevoke an invite code so nobody else can sign up with it. People who already used it stay linked to their row and keep their access; to cut one of them off use unlink_app_user. Cannot be undone, create a new invite instead. Requires organization owner or admin. Get the invite id
check_invite_codeCheck whether an invite code works right now, the way an app does before sign-up (POST /auth/invites/check, the same public route, limited to 10 calls a minute per address). A working code answers { valid: true, organizationId, app: { name, slug }, label, expiresAt }; anything el
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 9 nov 2026
El nombre en el registro se verificó con el dominio tasklite.net (el registro comprueba quién es dueño del dominio)
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Respondió en 273 ms (HTTP 200)
No hace falta iniciar sesión
Leímos 60 descripciones de herramientas y no encontramos instrucciones ocultas para la IA
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 3 de 3 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Funciona de las dos formas: instálalo en tu computadora o conéctate a la versión en la nube.
El repo de GitHub cambió por última vez –, y la última versión (0.14.4) llegó al registro hace 2 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. Se conecta por URL, así que también funcionan las apps que aceptan servidores MCP remotos, como ChatGPT en modo desarrollador.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, arr-mcp
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
One server, 40 tools, the whole media stack: *arrs, Jellyfin, Plex, Seerr, Cleanuparr, downloaders
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
A backend and an admin for apps built by AI agents. tasklite.net · docs
Describe a system and get the thing behind it: a project with typed tables and relations, rows, REST endpoints, an API key, and an admin interface the business itself operates afterwards. From Claude Code, Claude Desktop, ChatGPT, Gemini, Cursor or VS Code. Deploy a frontend onto it and hand the whole thing over.
Not the CLI task manager. There is an older, unrelated project also called
TaskLite, ad-si/TaskLite at
tasklite.org, a command-line task manager. This is a
different product from a different author: a hosted backend at
tasklite.net, published as
@tasklite/mcpand asnet.tasklite/mcpin
the MCP registry.
78 when installed locally, 73 over the hosted server (the five account tools sign_up connect login disconnect connection_status exist only locally; hosted connections sign in with OAuth). Every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint, so a client can tell what is safe to run unattended.
| Area | Tools |
|---|---|
| Account | sign_up connect login disconnect connection_status list_organizations configure_external_access |
| Structure | create_project create_board create_column update_board update_column delete_board delete_column delete_project reorder_columns get_board_schema list_projects list_boards export_project |
| Data | query_items create_item update_item set_cell get_cells set_cells_if_unchanged delete_item search fetch |
| Comments | list_comments add_comment update_comment delete_comment |
| Files | request_file_upload list_uploaded_files revoke_upload_link |
| Signatures | create_signature_request list_signature_requests get_signature_request signature_link void_signature_request |
| Phone systems (PBX) | list_telephony_providers get_telephony_connection start_telephony_connection test_telephony_connection configure_telephony_mapping preview_telephony_sync run_telephony_sync disconnect_telephony |
| Apps and API | build_backend create_app publish_app list_apps get_app_spec create_app_endpoint list_app_endpoints update_app_endpoint delete_app_endpoint create_app_api_key configure_app_settings get_email_usage |
| App users, invites and links | list_app_users add_app_user set_app_user_role remove_app_user create_app_invite list_app_invites revoke_app_invite check_invite_code link_app_user list_app_user_links unlink_app_user |
| Roles, policies and history | list_app_roles define_app_role delete_app_role grant_app_role revoke_app_role list_app_role_grants get_policy_identity set_policy_identity get_board_policy set_board_policy delete_board_policy explain_access simulate_request get_item_history |
| Frontend hosting | deploy_frontend list_deployments get_deployment_files rollback_deployment get_frontend_prompt |
| Automation and push | create_automation update_automation list_automations push_status send_test_push |
An endpoint's rowLevelSecurity.mode decides which rows a signed-in user reaches: owner (the rows they created), shared (every row, for authorized users), phone (the rows that carry their verified phone) or relation (the rows linked through a relation column to the row that stands for them). A coaching app, coaches and their trainees in one organization, is built from these:
| Board | Endpoint security |
|---|---|
| Coaches | mode: "phone", phoneColumn: the phone column. Each coach reads and edits his own row. |
| Trainees | mode: "relation", relationColumn: Trainees.Coach, identityPhoneColumn: Coaches.Phone, allowInvites: true. A coach sees only his trainees and can invite each to her row. |
| Weigh-ins (coach) | mode: "relation", relationColumn: Weigh-ins.Trainee, viaColumn: Trainees.Coach. One more hop: the weigh-ins of all his trainees. |
| Weigh-ins (trainee) | A second endpoint on the same board: mode: "relation", relationColumn: Weigh-ins.Trainee. |
A user "is" a row through an invite code (create_app_invite, or minted by a coach inside the app when the endpoint has allowInvites), through link_app_user, or with no link at all when their verified phone or email is written in the row (identityPhoneColumn, identityEmailColumn). configure_external_access with registrationPolicy: "invite" lets new people in only with a code. rowLevelSecurity accepts only the keys the server reads: an unknown key is refused, never dropped.
build_backend is the one to reach for first: it takes a description of a system and creates the project, the boards, their typed columns including the relations between them, sample rows, and a published REST API with a key, in one call, instead of a dozen.
When people in one app may see different things (a manager sees every case, an agent only his own, bookkeeping the money columns), an endpoint uses rowLevelSecurity.mode: "policy" and the board carries a policy: define_app_role and grant_app_role (or set_policy_identity, which reads the roles from an employees board), then set_board_policy with the document, then explain_access and simulate_request to prove it. get_item_history reads who changed which field of a row, from what to what. The tools need a backend with the permissions routes; see docs/app-access.md.
Install the package (and Claude Code if you don't have it), then add the server by its binary. That avoids a known Windows issue where claude mcp add mis-parses npx -y.
npm install -g @anthropic-ai/claude-code @tasklite/mcp
claude mcp add tasklite -- tasklite-mcp
Add -s user to claude mcp add to make it available in every project (claude mcp add -s user tasklite -- tasklite-mcp); the default scope is the current project only.
Then tell Claude what you want to build. The sign_up tool creates your account, organization, and connection from the conversation (a strong random password is generated locally and never shown; use "forgot password" with your email for web access).
Already have an account? Create a key at TaskLite → Integrations → "Connect Claude Code" and use:
claude mcp add tasklite -e TASKLITE_API_KEY=tl_xxx -- tasklite-mcp
Point any MCP client at the hosted server; there is nothing to install locally:
claude mcp add --transport http tasklite https://mcp.tasklite.net/mcp \
--header "Authorization: Bearer tl_xxx"
The hosted server is stateless: every request carries its own credential, so one endpoint serves every account safely.
Simplest of all: the connector. In Claude (claude.ai or the desktop app), Settings → Connectors → add TaskLite, or add it by address using the URL above. You sign in once over OAuth; there is no key to create or store. Note that the tools appear in a *new* chat, not in the conversation you were already in.
Optional env: TASKLITE_API_URL (default https://api.tasklite.net), TASKLITE_APP_URL (default https://app.tasklite.net).
One hosted server, every MCP client. Full setup notes: https://tasklite.net/docs/guides/connector-from-cursor-codex-desktop
{"mcpServers":{"tasklite":{"url":"https://mcp.tasklite.net/mcp"}}} in .cursor/mcp.json..vscode/mcp.json with {"servers":{"tasklite":{"type":"http","url":"https://mcp.tasklite.net/mcp"}}}.https://mcp.tasklite.net/mcp. The server implements search and fetch.gemini extensions install https://github.com/tasklite-net/tasklite-mcp (this repo ships gemini-extension.json), or add httpUrl + oauth to ~/.gemini/settings.json.Authorization: Bearer tl_….create_project → create_board → create_column × N builds the schema.create_item / query_items seed and inspect data.create_app → create_app_endpoint (with exposedColumns + RLS) → create_app_api_key expose the REST surface for your frontend.get_app_spec / get_frontend_prompt generate the frontend against it.adminUrl, the ready-made admin for the end client.deploy_frontend puts a static frontend on https://{slug}.tasklite.dev. No server, no hosting account, no CI to configure. Hand the site over in one of three ways:
deploy_frontend(appId: "app-xxxxxx", files: [{ path: "index.html", content: "<!doctype html>…" }, { path: "app.js", content: "…" }])
deploy_frontend(appId: "app-xxxxxx", zipUrl: "https://github.com/you/site/releases/download/v1/dist.zip") deploy_frontend(appId: "app-xxxxxx", dir: "./dist")
files is the path from ChatGPT or any hosted client: the assistant writes the page and deploys it in the same turn. zipUrl takes an export from Lovable, Bolt or a GitHub release. dir is for an MCP running on the machine with the build output.
Hosted pages call the app API through the relative path /api/{endpoint}. The hosting proxy attaches the app identity server-side, so the browser never carries an API key. list_deployments shows the versions and rollback_deployment points the live URL back at an earlier one.
tl_ key is exchanged for a short-lived JWT (POST /public/v1/auth/session); all calls run with the key owner's own permissions, never super-admin.tasklite.dev need no key at all.npm install
npm run build TASKLITE_API_KEY=tl_xxx TASKLITE_API_URL=http://localhost:3333 node dist/index.js
MIT