bticket-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bticket-mcpshow my open cards"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
bticket-mcp
Servidor MCP fino que expõe a API Laravel Sanctum do B-Ticket como ferramentas. O Cursor (e o Grok Bot) passam a consultar usuário, quadros, cards, tickets, dashboard e notificações — e também criar card com horas — sem inventar rotas.
A maior parte das tools é somente leitura. bticket_create_card é a tool de escrita: cria o card, lança horas e se atribui ao card.
O que este servidor faz
Ferramenta MCP | Endpoint B-Ticket |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bticket_list_my_open_cards prefere board_uuid. Sem o UUID, lista os quadros e agrega até 8 boards — isso é mais pesado e deve ser evitado no dia a dia.
Related MCP server: Xalantis MCP Server
Host de produção
A API B-Ticket em produção é https://bticket.brediweb.com.br (sem barra no final). As rotas Laravel ficam em /api, por exemplo:
POST https://bticket.brediweb.com.br/api/user/login
GET https://bticket.brediweb.com.br/api/userUse esse valor em BTICKET_API_URL. Não coloque e-mail, senha nem token no git — só placeholders em .env.example.
Requisitos
Node.js 18+
Acesso HTTPS à API B-Ticket (
https://bticket.brediweb.com.brem produção)Credenciais Sanctum ou um token de longa duração
Setup
git clone https://github.com/Silvio-Batista/bticket-mcp.git
cd bticket-mcp
cp .env.example .env
npm install
npm run buildEdite .env (nunca commite este arquivo):
BTICKET_API_URL=https://bticket.brediweb.com.br
BTICKET_EMAIL=voce@empresa.com
BTICKET_PASSWORD=sua-senha
BTICKET_TOKEN=
PORT=3000BTICKET_API_URLé a origem sem barra final e sem/api. As chamadas vão para{BTICKET_API_URL}/api/...(produção:https://bticket.brediweb.com.br/api/user/login).Se
BTICKET_TOKENestiver preenchido, o login é ignorado e o token é usado emAuthorization: Bearer ….Sem token, o servidor faz
POST /api/user/logincom{ email, password }, lêresults.token(SanctumplainTextToken) e guarda o valor em memória até o processo reiniciar. Em401subsequente, tenta um novo login (somente quando o token não veio deBTICKET_TOKEN).
Scripts
Script | Uso |
| Compila TypeScript para |
| Transporte stdio (Cursor local) |
| Transporte Streamable HTTP ( |
| HTTP com reload ( |
| Smoke test com API Laravel mockada |
Uso local (stdio) no Cursor
Copie
.enve rodenpm run build.Em Cursor Settings → MCP (ou
~/.cursor/mcp.json/.cursor/mcp.json):
{
"mcpServers": {
"bticket": {
"command": "node",
"args": ["/caminho/absoluto/bticket-mcp/dist/index.js"],
"env": {
"BTICKET_API_URL": "https://bticket.brediweb.com.br",
"BTICKET_EMAIL": "voce@empresa.com",
"BTICKET_PASSWORD": "sua-senha"
}
}
}
}Equivalente com token estático:
{
"mcpServers": {
"bticket": {
"command": "node",
"args": ["/caminho/absoluto/bticket-mcp/dist/index.js"],
"env": {
"BTICKET_API_URL": "https://bticket.brediweb.com.br",
"BTICKET_TOKEN": "1|seu-token-sanctum"
}
}
}
}Reinicie o MCP no Cursor. Em Output → MCP Logs você deve ver a sessão stdio e as 10 tools.
Não use console.log no processo stdio: stdout é o protocolo MCP. Logs vão para stderr.
Deploy como MCP remoto (HTTPS)
O modo HTTP sobe:
GET /health— livenessPOST|GET|DELETE /mcp— Streamable HTTP (transporte atual, use esta URL no Cursor)GET /sse+POST /messages?sessionId=— SSE legado (clientes antigos)
npm run build
npm run start:httpO servidor escuta em 0.0.0.0:$PORT (default 3000). Coloque-o atrás de HTTPS (Railway, Render, Fly, Nginx, Cloudflare Tunnel, etc.) com as variáveis de ambiente acima. O processo autentica na API B-Ticket, não no cliente MCP: as credenciais ficam só no host.
URL pública esperada:
https://seu-mcp.example.com/mcpHealth check:
curl https://seu-mcp.example.com/healthConectar no Cursor (Add MCP Server / URL)
Publique o serviço com HTTPS.
Cursor → Settings → MCP → Add new MCP server (ou edite
mcp.json):
{
"mcpServers": {
"bticket": {
"url": "https://seu-mcp.example.com/mcp"
}
}
}Se o cliente só falar SSE antigo, use
https://seu-mcp.example.com/sse.Ative o servidor e confirme as tools
bticket_*.
O Grok Bot / Cloud Agent usa o mesmo URL HTTPS. Não coloque senha no mcp.json remoto: o MCP já autentica na API com o .env do host.
Filtros de cards
bticket_list_cards encaminha os query params oficiais:
busca, membro_id, etiqueta_id, cliente_id, projeto_id, coluna_id, data_prazo_de, data_prazo_ate, sem_data, atrasado, checklist_concluido, incluir_arquivados, page, per_page.
membro_id do usuário logado é o campo id de GET /api/user (inteiro numérico da API, enviado como string).
Erros da API
Falhas 401 / 422 / 500 voltam como resultado de tool com isError e o texto de messages, message ou errors do Laravel. Exemplo: credenciais inválidas → B-Ticket API HTTP 401: Suas credenciais estão incorretas.
Testes
npm install
npm test
npm run buildO smoke sobe um HTTP mock no estilo apiResponse do B-Ticket, valida login + cache de token, paths reais, as tools de leitura e a criação de card (horas + membro) via transporte in-memory do SDK.
Criar card e lançar horas
Use bticket_create_card no final de uma missão, por exemplo:
faça isso na tarefa X, projeto Sistema Secretaria, e depois crie um card para registrar 2 horas e o que foi feito
A tool resolve quadro/projeto/coluna por nome. Campos principais:
titulo— obrigatóriodescricao— texto puro (sem HTML) com o pedido e o que foi feitoqtd_horas— lança na API viaPUTqtd_horas(não manda hora no POST de criação)projetoouprojeto_idboard_uuidouboard(se só existir um quadro, usa ele)colunaoucoluna_id— se houver horas e a coluna não for informada, cai em Concluído
atribuir_a_mim vem ligado por padrão.
Segurança
.envestá no.gitignore. Só.env.examplecom placeholders entra no git.Prefira
BTICKET_TOKENde escopo limitado em produção.Hoste o MCP remoto só em HTTPS e em rede confiável: quem chama o MCP herda o acesso B-Ticket daquele processo.
Available Tools
10 toolsbticket_create_cardCriar card e registrar horasA
Cria um card no B-Ticket para registrar o que foi feito e as horas trabalhadas. Aceita projeto/quadro/coluna por nome (não precisa do id). Fluxo: POST /coluna/{id}/card, opcionalmente PUT com qtd_horas e PATCH para se atribuir ao card. Descrição em texto puro, sem HTML. Se informar qtd_horas e não passar coluna, usa a coluna de Concluído.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | Nome do quadro, se não passar board_uuid | |
| coluna | No | Nome da coluna. Default: Concluído se houver horas, senão Desenvolvimento | |
| titulo | Yes | Título do card | |
| projeto | No | Nome do projeto, ex.: Sistema Secretaria | |
| coluna_id | No | Id numérico da coluna | |
| descricao | No | O que foi pedido e o que foi feito, em texto puro (sem HTML) | |
| qtd_horas | No | Horas trabalhadas. Lançadas depois da criação via PUT qtd_horas | |
| board_uuid | No | UUID do quadro. Preferível se já conhecido | |
| cliente_id | No | Id numérico do cliente. Se omitido, herda do projeto | |
| data_prazo | No | YYYY-MM-DD | |
| projeto_id | No | Id numérico do projeto | |
| atribuir_a_mim | No | true (default) atribui o usuário autenticado ao card |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, openWorldHint=true), the description discloses the multi-step side-effect behavior: creating the card via POST, optionally registering hours via PUT qtd_horas, and self-assigning via PATCH. It also states the plain-text constraint for descriptions and the Concluído column fallback — real behavioral context that annotations alone would not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, purpose-first with no marketing filler; the flow line earns its place because it explains ordering that the schema can't. It could trim the bits that repeat schema documentation, but overall it is compact and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, no output schema, and light annotations, the description covers purpose, flow, defaults, and input constraints well. But it does not mention the response shape, error behavior, how the agent can confirm success or retrieve the created card's id — a significant gap given the tool has no output schema to fill that in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline per the rubric is 3, and the description adds some value by sequencing how parameters are used (qtd_horas landed later via PUT, assign-to-me via PATCH) and by aggregating the name-based lookup rule. However, parts of it (plain-text description, Concluído default, names instead of IDs) duplicate what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Cria um card no B-Ticket para registrar o que foi feito e as horas trabalhadas' — verb (cria), resource (card), and clear scope (register work + hours). It clearly distinguishes itself from the read-only siblings (bticket_list_* and bticket_whoami), being the only creation tool in the set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage context: it accepts project/board/column by name ('não precisa do id'), explains the execution flow (POST, optional PUT, PATCH), and specifies the column default when qtd_horas is set. It does not explicitly name alternatives or exclusions (e.g., 'use bticket_list_columns first to find ids'), so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_dashboard_statsEstatísticas do dashboardARead-onlyIdempotent
Lê estatísticas e o relatório diário da equipe: GET /api/dashboard/estatisticas e GET /api/dashboard/relatorio-diario-equipe.
| Name | Required | Description | Default |
|---|---|---|---|
| include_team_daily_report | No | true (default) inclui relatorio-diario-equipe além de estatisticas |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds the specific GET endpoints, reinforcing the read-only nature, but it doesn't go beyond that to explain any additional behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler. It front-loads the action and resource, then lists the exact endpoints, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only dashboard stats tool with one well-documented parameter and strong annotations, the description is largely complete. It names both accessed endpoints and the schema covers the include_team_daily_report parameter, leaving little ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already well-documented by its own description. The tool description adds minimal semantic value beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Lê') and the resource ('estatísticas e o relatório diário da equipe'), making it obvious what the tool does. It also names the two specific endpoints, which disambiguates it from sibling list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for dashboard statistics and daily team reports, which gives context, but it does not explicitly state when to choose this tool over alternatives or mention any exclusions. It is adequate but not proactively helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_boardsListar quadrosARead-onlyIdempotent
Lista os quadros (boards) acessíveis ao usuário autenticado (GET /api/quadros). Cada quadro usa id como UUID.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only and idempotent behavior; the description adds the HTTP GET endpoint and notes that board id fields are UUIDs, which are useful beyond the annotation defaults. It does not cover pagination or response shape, but those are not critical for this simple list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the action and object, and only includes two meaningful details: the endpoint and the id type. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and is a simple authenticated read-only list operation, the description covers the core semantics well. Minor omissions such as response shape or pagination exist, but annotations and endpoint information make the definition sufficiently complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema already provides complete coverage. The description adds one relevant semantic detail (id is a UUID), which is helpful for downstream usage, though not strictly parameter-related.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and names the exact resource ('quadros/boards'), adds the scope ('acessíveis ao usuário autenticado') and the endpoint ('GET'), making it unmistakable which operation is performed. It is clearly distinguished from sibling tools that list tickets, projects, or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by specifying that this returns the boards accessible to the authenticated user, so an agent knows it is for fetching available boards. It does not explicitly discuss alternatives or when not to use it, but the resource and scope are sufficiently explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_cardsListar cards de um quadroARead-onlyIdempotent
Lista cards de um quadro B-Ticket. Por padrão GET /api/quadro/{uuid}/cards (colunas ativas). Use concluidos=true para GET /api/quadro/{uuid}/cards/concluidos. Filtros combinam com AND; arrays (membro_id, etiqueta_id, coluna_id) combinam com OR.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Página (default 1) | |
| busca | No | Busca textual em título, descrição, cliente e projeto | |
| atrasado | No | true = prazo anterior a hoje | |
| per_page | No | Itens por página | |
| sem_data | No | true = apenas cards sem data_prazo | |
| coluna_id | No | Filtrar por coluna(s) | |
| membro_id | No | Filtrar cards que tenham um destes membros | |
| board_uuid | Yes | UUID do quadro | |
| cliente_id | No | UUID do cliente | |
| concluidos | No | true = cards da coluna de concluídos | |
| projeto_id | No | UUID do projeto | |
| etiqueta_id | No | Filtrar cards que tenham uma destas etiquetas | |
| data_prazo_de | No | Prazo >= YYYY-MM-DD | |
| data_prazo_ate | No | Prazo <= YYYY-MM-DD | |
| incluir_arquivados | No | true = incluir cards arquivados | |
| checklist_concluido | No | true = todos os itens de checklist concluídos |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral detail: the default result excludes concluded cards, the endpoint changes with the concluidos flag, and filters combine with AND while array filters combine with OR. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences deliver the essential guidance with no filler: the core action, the default endpoint behavior, the concluidos variant, and the filter combination rule are all front-loaded and compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with 16 parameters, the description covers the most decision-relevant behavior: default scope, the concluded-cards switch, and filter semantics. It does not describe the response shape or pagination behavior, but the schema already documents page/per_page and the annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented, but the description adds meaning beyond the schema by explaining cross-parameter behavior: filters combine with AND and array-valued filters (membro_id, etiqueta_id, coluna_id) combine with OR. It also maps concluidos=true to a different endpoint, which is not inferable from the parameter description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Lista cards de um quadro B-Ticket') and further narrows the scope by naming the default endpoint for active columns and the concluded-cards endpoint. This makes it clearly distinguishable from sibling tools like bticket_list_tickets and bticket_list_my_open_cards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use the default active-columns call versus setting concluidos=true to hit the concluded-cards endpoint. It also explains how filters compose, giving clear operational context, though it does not explicitly name sibling alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_columnsListar colunas do quadroARead-onlyIdempotent
Lista as colunas de um quadro (GET /api/quadro/{uuid}/colunas), ex.: Desenvolvimento, Aguardando QA, Concluído / Publicado.
| Name | Required | Description | Default |
|---|---|---|---|
| board_uuid | Yes | UUID do quadro |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds the GET endpoint and sample column names but no further behavioral details such as ordering, empty results, or response structure, which is acceptable given the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the verb, resource, endpoint, and concrete examples with no filler. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low-complexity with one documented parameter, strong annotations, and no output schema. The description's examples partly fill the missing return-value gap, though it could state the exact response shape (e.g., array of column names) explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single required parameter board_uuid ('UUID do quadro'). The description does not add parameter detail beyond that, so the schema carries the parameter semantics and baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb ('Lista'), the resource ('colunas de um quadro'), and gives the HTTP endpoint plus representative examples. This clearly distinguishes the tool from sibling board/ticket/card/list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the operation unambiguous but does not state when to prefer it over siblings such as bticket_list_boards or bticket_list_cards, nor does it mention exclusions. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_my_open_cardsMeus cards abertosARead-onlyIdempotent
Atalho para cards abertos do usuário autenticado. Preferência: passe board_uuid — o servidor resolve o membro_id via GET /api/user e chama GET /api/quadro/{uuid}/cards?membro_id={id}. Sem board_uuid, lista GET /api/quadros e agrega cards de cada quadro (pesado; limitado a 8 quadros). Não use agregação se não precisar.
| Name | Required | Description | Default |
|---|---|---|---|
| busca | No | Busca textual extra | |
| atrasado | No | true = apenas cards atrasados | |
| per_page | No | ||
| board_uuid | No | UUID do quadro. Recomendado para evitar agregação em vários boards. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only, idempotent, and non-destructive, so the description needs to add operational behavior. It does by revealing two execution modes, the server-side API calls, and the performance limitation (pesado, limited to 8 boards) — valuable context not available in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences front-load the purpose, then provide usage preference, internal flow, and a warning. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with optional parameters and no output schema, the description covers purpose, preferred invocation, fallback behavior, and limitations. Nothing essential for correct invocation is missing; return shape is implied by 'cards' and the card endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover busca, atrasado, and board_uuid (75% coverage). The description adds meaning by explaining why board_uuid matters, including the exact GET /api/user resolution and the aggregation fallback, which goes beyond the schema's single recommendation line.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states this is a shortcut to the authenticated user's open cards ('cards abertos do usuário autenticado') and explains the server resolves member_id via /api/user, which is a specific scoped resource. That distinguishes it from the generic sibling bticket_list_cards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preference: pass board_uuid to avoid aggregation, and warns not to use aggregation if not needed ('Não use agregação se não precisar'). It also discloses the heavy cost and 8-board limit of the fallback, so an agent can decide when this tool/parameter path is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_notificationsListar notificaçõesARead-onlyIdempotent
Lista as últimas notificações (GET /api/notificacoes) e inclui a contagem de não lidas (GET /api/notificacoes/contagem) quando include_unread_count não for false.
| Name | Required | Description | Default |
|---|---|---|---|
| apenas_nao_lidas | No | true = somente não lidas | |
| include_unread_count | No | true (default) inclui GET /notificacoes/contagem |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false; the description adds value by specifying the exact GET endpoints and the conditional behavior of include_unread_count. It does not cover pagination, rate limits, or authentication, but for a read-only list tool the main behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one fua sentence that front-loads the primary action, then adds the optional call condition. Every clause adds information, and there is no filler or duplication of the parameter descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with two optional parameters and no output schema, the description manages both endpoints and the default behavior. It does not describe the return payload shape beyond 'notificações' and 'contagem', but that is largely inferable from the endpoints; the simplicity of the tool makes this complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already have descriptions. The description enriches include_unread_count by explaining the live trigger: it is included when include_unread_count is not false, i.e. by default or true, making the parameter's effective behavior clearer than the schema's simple 'true (default)' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action, resource, endpoint, and optional second call: 'Lista as últimas notificações (GET /api/notificacoes)' and 'inclui a contagem de não lidas (GET /api/notificacoes/contagem)'. It clearly distinguishes this list tool from siblings that target other resources (boards, tickets, cards, projects).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs. alternatives, no prerequisites, and no exclusions. The purpose is self-evident, but the description does not say e.g. 'use this to check notifications or unread counts' or point to a sibling alternative if a different level of detail is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_projectsListar projetosARead-onlyIdempotent
Lista projetos (GET /api/projetos). Use para resolver o nome do projeto antes de criar um card. Filtro opcional busca é aplicado localmente no nome/cliente.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| busca | No | Filtro textual no nome do projeto ou cliente | |
| per_page | No | ||
| cliente_id | No | Filtrar pelo id numérico do cliente |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows this is a safe read operation. Beyond that, the description adds two important behavioral details: the optional 'busca' filter is applied locally (not via server-side query), and pagination parameters are available. This additional context is valuable and not redundant with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the main verb and use case. It wastes no words, and the inline endpoint reference is efficient. It could arguably gain a point by being even more compact, but the structure is clean and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description covers the purpose, filters, and use case. It does not mention pagination behavior or any result ordering, but given the readOnlyHint and the simplicity of the tool, this is sufficient for an agent to call it correctly. The absence of output schema is acceptable for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with 'busca' and 'cliente_id' already described in the schema. The description repeats the 'busca' filter's meaning but adds that it's applied locally, which is useful. However, 'page' and 'per_page' are undocumented in both schema and description, relying on their obvious semantics. Since coverage is above the low threshold, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear action-verb phrase 'Lista projetos' and ties it to the underlying endpoint (GET /api/projetos). It also states the primary use case (resolving project name before creating a card), which distinguishes it from sibling list tools like bticket_list_cards or bticket_list_boards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to use this tool before creating a card, giving a clear context. While it doesn't mention when not to use it or name alternatives directly, the stated pre-card creation use case implicitly guides the agent away from other list tools. This is adequate guidance, not explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_list_ticketsListar ticketsARead-onlyIdempotent
Lista tickets visíveis ao usuário autenticado (GET /api/tickets). Inclui tickets próprios e de quadros compartilhados, conforme a API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile. The description adds meaningful behavioral context: the result set is limited to tickets visible to the authenticated user and includes both own and shared-board tickets. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the verb and resource. The phrase 'conforme a API' adds little actionable value, but overall the text is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only list operation, the description covers the endpoint, scope, and inclusion criteria sufficiently. There is no output schema, so return-shape or pagination details could be added, but the tool's simplicity and strong annotations make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so there are no parameter semantics to document. The relevant semantic content is the scope of the returned ticket set, which the description does cover.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Lista' tickets), the resource ('tickets'), and the scope ('visíveis ao usuário autenticado', including own and shared board tickets). It is broadly distinguishable from sibling list tools by resource, though it does not explicitly contrast with potentially overlapping tools like bticket_list_my_open_cards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to prefer this tool over the sibling list tools, nor any exclusions or conditions. The description only restates what the tool does; usage context is left entirely to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bticket_whoamiUsuário atualARead-onlyIdempotent
Retorna o usuário autenticado na API B-Ticket (GET /api/user), incluindo id, nome, e-mail, papéis e flags de notificações.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, so safety is covered. The description adds value beyond annotations by specifying exactly which user attributes are returned (id, nome, e-mail, papéis, flags de notificações) and the endpoint, giving the agent a clear picture of the response content without needing to inspect output schemas.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence delivers all necessary information: the action, the endpoint, and the returned fields. No wasted words, and the core purpose is front-loaded. Excellent structure for quick consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is complete: it identifies the operation, the resource, and the response contents. Annotations cover safety aspects, and there are no missing details an agent would need to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description doesn't need to explain parameters; it correctly focuses on what the tool does and returns. It adds meaningful context about the response fields, which is sufficient for a no-input tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retorna' (returns) and the resource 'usuário autenticado' (authenticated user), including the specific endpoint GET /api/user. It also lists the fields returned (id, name, email, roles, notification flags), which is precise and distinguishes it from sibling list/create tools that target other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. However, the purpose is self-evident (fetching current user identity) and there is no sibling that performs a similar function, so usage is implied. Lacks explicit exclusions or context, which keeps it at an average score.
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.
10 tool updates
v1.1.0- First observed
bticket_create_card - First observed
bticket_dashboard_stats - First observed
bticket_list_boards - First observed
bticket_list_cards - First observed
bticket_list_columns - First observed
bticket_list_my_open_cards - First observed
bticket_list_notifications - First observed
bticket_list_projects - First observed
bticket_list_tickets - First observed
bticket_whoami
TDQS
Scored across 10 tools
Most tools have distinct purposes, but bticket_list_tickets, bticket_list_cards, and bticket_list_my_open_cards all deal with similar work-item concepts and could be confused. The descriptions clarify some usage differences, but the relationship between tickets and cards is never made explicit.
The bticket_list_* pattern is used consistently across the read operations, and bticket_create_card follows the same verb_noun structure. Minor exceptions are bticket_whoami and bticket_dashboard_stats, which break the expected verb pattern but remain readable.
10 tools is a well-scoped set for this server's purpose. The count covers the main read flows and card creation without bloat or trivial redundancy.
The read side is well covered with boards, cards, tickets, projects, columns, notifications, and stats, but the write side only has bticket_create_card. There is no update, move, delete, or comment operation, which leaves notable gaps for a project-management domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- BleepOAuthcom.usebleep
Create Tasks and run Workflows in Bleep from Claude, ChatGPT, and other AI assistants.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to create tickets and worklog entries in REI3 ticket management systems through the REI3 Tickets API. Supports secure authentication and provides natural language interface for ticket operations.5-

Xalantis MCP Serverofficial
AlicenseAqualityBmaintenanceEnables managing support tickets from Claude, Cursor, and other AI tools, including listing, creating, updating, and replying to tickets.611MIT- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and manage OpenProject projects, work packages, attachments, time tracking, wiki, and users via the OpenProject API v3.-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to search and create tasks in TeamBoard via its HTTP API.-