Skip to main content
Glama
j7018515

ibronevik-taxi-mcp

by j7018515

ibronevik-taxi-mcp

MCP-сервер над самописным API такси-сервиса (/taxi/api/v1/...). Выставляет ручки бэка как инструменты для языковой модели.

Это каркас (этап 1). В нём собрана и проверена вся общая механика, на которую дальше навешиваются ручки. Изменяющие инструменты сценария «жизненный цикл заказа» подключаются поверх готового TaxiClient.

Что уже работает

Четыре read-only инструмента, работающих без учётной записи (публичный справочник прода):

Инструмент

Назначение

taxi_status

доступность бэка, арендатор, версия справочника, состояние авторизации

taxi_reference_list

имена и размеры всех справочных таблиц

taxi_reference_get

содержимое указанных таблиц (car_classes, currencies, …)

taxi_authenticate

проверка входа по TAXI_LOGIN/TAXI_PASSWORD (токен не разглашается)

Related MCP server: bus-scheduling-mcp

Что внутри каркаса

Три неочевидные особенности бэка, ради которых каркас и нужен, инкапсулированы здесь один раз:

  • Тело запроса — форма, а не JSON. Данные передаются полем data с JSON-строкой (src/core/transport.ts). Отправка application/json молча ломает поведение бэка.

  • Двухступенчатая авторизация с окном 10 секунд. POST /auth/auth_hash → сразу POST /token/token + u_hash (src/core/auth.ts). Токен долгоживущий, кешируется; куки между шагами тащить не нужно. На каждом запросе прикладываются token и u_hash; при auth_error — один прозрачный перелогин.

  • Ответ всегда HTTP 200, код внутри тела; 304 для справочника — это успех. Кеш справочника по версии, обновление через ucv/304 (src/core/client.ts).

Структура:

src/
  config.ts            конфигурация из окружения, построение URL ручки
  core/
    transport.ts       form-кодирование, прокси-осведомлённый fetch, разбор JSON
    auth.ts            цепочка auth -> token, кеш token/u_hash
    client.ts          единый call(), разбор ответа, кеш справочника
    errors.ts          типы ошибок (транспорт / api / auth / запись)
  mcp/
    server.ts          MCP stdio-сервер, регистрация инструментов
test/
  smoke.ts             проверка каркаса против прода (read-only, без аккаунта)
  mcp-check.ts         проверка MCP-слоя end-to-end настоящим MCP-клиентом

Требования

  • Node.js ≥ 22.6 (запускает TypeScript напрямую, без сборки).

Установка и запуск

npm install
cp .env.example .env      # при необходимости отредактировать

npm run smoke             # проверка каркаса против прода (read-only)
node test/mcp-check.ts    # проверка MCP-слоя end-to-end
npm start                 # запустить MCP-сервер (stdio)
npm run typecheck         # проверка типов

Подключение к MCP-клиенту (stdio), пример конфигурации:

{
  "mcpServers": {
    "ibronevik-taxi": {
      "command": "node",
      "args": ["/путь/к/mcp-server/src/mcp/server.ts"],
      "env": { "TAXI_CONFIG": "0" }
    }
  }
}

Тестирование: что можно и чего нельзя

  • Read-часть (справочник) — тестируется на проде без учётной записи. Именно это делают smoke.ts и mcp-check.ts.

  • Авторизация — требует реальной учётной записи; замокать нельзя, шифрование u_hash завязано на серверный секрет.

  • Изменяющие ручки (сценарий 1) — на проде тестировать нельзя: каждый вызов создаёт реальные записи в боевой базе. Нужен тестовый тенант (изолированная база, где можно свободно создавать и удалять) либо тестовый аккаунт, чьи заказы разрешено отменять. Полный цикл требует двух ролей — клиент (1) и водитель (2).

Политика записи

Переменная TAXI_WRITE_MODE (block | confirm | allow, по умолчанию confirm). Значение по умолчанию не случайно: MCP отдаёт ручки языковой модели, а бэкенд не проверяет HTTP-метод (записи проходят и по GET). Поэтому запись по умолчанию не должна выполняться «молча» — изменяющие инструменты проходят через эту политику.

Безопасность

Секретов в коде нет — вся конфигурация из окружения, .env не коммитится.

Available Tools

4 tools
taxi_authenticateПроверить авторизациюA

Выполняет вход по TAXI_LOGIN/TAXI_PASSWORD (цепочка auth -> token). Токен не разглашается — возвращается только факт успеха. Требует учётных данных.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses a key behavioral trait: the token is not revealed, only success/failure is returned. It also implies a side-effect-free authentication check. However, it does not disclose failure behavior, rate limits, or what happens on invalid credentials. The description adds some value but leaves gaps.

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 information: what it does, what it returns, and what it requires. No fluff, front-loaded with the 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?

For a zero-parameter authentication tool with no output schema, the description covers the main points: action, credential source, and return behavior. However, it lacks details on error cases (e.g., invalid credentials, network failure) and whether repeated calls are safe. Given the simplicity, it is adequate but not fully complete.

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 input schema has zero parameters, so there is nothing for the description to add about parameters. The description explains that credentials come from environment variables (TAXI_LOGIN/TAXI_PASSWORD), which is useful context beyond the empty schema. Baseline 4 for zero-param tools is appropriate.

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 ('Выполняет вход' – performs login) and resource (TAXI_LOGIN/TAXI_PASSWORD auth chain), and clarifies that it returns only success/failure, not the token. It is distinguishable from siblings like taxi_status or taxi_reference_list, though it doesn't explicitly name them.

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 implies when to use it: when credentials are available and authentication is needed. It states a requirement ('Требует учётных данных') but does not explicitly contrast with alternatives or say when not to use it. Sibling names suggest other tools are for status/reference, so context is somewhat clear but not explicit.

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

taxi_reference_getСодержимое справочных таблицA

Возвращает полное содержимое указанных справочных таблиц (например car_classes, currencies, payment_ways). Read-only, без авторизации.

ParametersJSON Schema
NameRequiredDescriptionDefault
tablesYesИмена таблиц из taxi_reference_list

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 behavioral disclosure burden. It explicitly says 'Read-only, без авторизации', which tells the agent the tool has no mutation side effects and needs no authentication token. This is particularly useful with a taxi_authenticate sibling present. It does not mention pagination or output size, but the core read/no-auth traits are clearly declared.

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 consists of two short sentences, the first front-loading the core action and concrete examples, and the second adding the important access/behavioral facts. Every clause earns its place with no filler or redundant restatement of the tool name.

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 one-parameter getter with no output schema, the description is nearly complete: it explains what is returned, hints at valid table names, and clarifies read-only/no-auth behavior. It could be slightly richer by explicitly pointing to taxi_reference_list for discovering valid table names, but the schema already supplies that linkage.

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 input schema already describes the single 'tables' parameter clearly—names from taxi_reference_list—so schema coverage is 100% and the baseline is 3. The description adds concrete examples of table names like car_classes and currencies, which is mildly helpful but does not meaningfully expand the semantics beyond the schema.

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 the exact action and resource: returning full contents of reference tables, and gives concrete examples such as car_classes, currencies, and payment_ways. It is clearly distinct from the sibling list-style tool (taxi_reference_list) and from the unrelated status/authentication tools, so an agent can identify its role immediately.

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 conveys that the tool is for retrieving reference table contents and states that it is read-only, but it does not explicitly explain when to use it versus taxi_reference_list or when not to use it. Table-name discovery is only implied through the schema description, not stated in the usage guidance itself.

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

taxi_reference_listСписок справочных таблицA

Имена и размеры всех публичных справочников (/data/) с версией кеша. Read-only, без авторизации.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the operation is read-only and requires no authorization, which are essential behavioral traits. It also mentions the return includes cache version. It does not cover errors or performance, but for a simple list tool this is adequate.

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 extremely concise, consisting of two short sentences that state the core function and key behavioral constraints. Every word adds value, and the primary information (what is listed) is front-loaded.

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?

Given no output schema and no annotations, the description covers what the tool returns (names, sizes, cache version) and access requirements (read-only, no auth). For a simple list tool, this is complete; an agent can call it without further guidance.

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 has zero parameters, so there is nothing to explain. Per the guidelines, baseline for zero-parameter tools is 4. The description adds operational context but no parameter-specific semantics 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?

The description explicitly states the tool returns names and sizes of all public reference directories under /data/, including cache version. It clearly identifies the resource and function, distinguishing it from siblings like taxi_reference_get which likely fetches a specific table.

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 implies this tool is for listing available reference tables but does not explicitly name alternatives or provide when-to-use versus when-not-to-use guidance. The read-only and no-auth statements hint at safe usage but do not direct selection among siblings.

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

taxi_statusСтатус подключенияA

Проверяет доступность бэка, возвращает арендатора, версию справочника и состояние авторизации. Read-only, учётные данные не требуются.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the operation is read-only, requires no credentials, and enumerates what the response contains. It does not describe failure modes, but for a simple status probe this is adequate.

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 compact sentence front-loads the core action ('checks backend availability') and then lists the returned data and key behavioral traits. Every clause earns its place with no redundancy.

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, no-output-schema status tool, the description is complete: it states the purpose, the behavioral safety profile, the credentials requirement, and the returned fields. Nothing an agent needs to select and invoke it correctly is missing.

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 has zero parameters and 100% schema coverage, so there are no parameter semantics to explain. The description appropriately adds that credentials are not required, which is the only relevant input-related information.

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 verb and resource: it checks backend availability and returns tenant, reference version, and authorization state. This clearly distinguishes it from the sibling reference/authentication tools, whose purposes are different.

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?

The description clearly implies the tool is a lightweight connectivity/status check and explicitly notes it is read-only and requires no credentials, which signals when it is appropriate to call. It does not explicitly contrast with taxi_authenticate, but the context is sufficiently clear.

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. Dates show when Glama detected each change.

  1. 4 tool updatesv0.1.0
    • First observedtaxi_authenticate
    • First observedtaxi_reference_get
    • First observedtaxi_reference_list
    • First observedtaxi_status

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool addresses a separate concern: backend status, reference catalog listing, reference content retrieval, and authentication. There is no functional overlap between them.

Naming Consistency3/5

All tools share the taxi_ prefix bind underscores, but the structure varies: taxi_status is a plain noun, taxi_reference_list is a noun compound, and taxi_reference_get puts the verb after the noun. This is readable but not a consistent verb_noun convention.

Tool Count5/5

Four tools cover the narrow scope of the server without redundancy. Each one has a clear role, and the count feels neither thin nor bloated.

Completeness3/5

The reference data use-case is covered with list and get operations, but authenticate is a standalone capability that no other tool consumes, since all references are public. The set feels slightly incomplete around authenticated actions.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read and modify Mendix application models through MCP tools for creating modules, entities, pages, microflows, deploying, and querying runtime data.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to drive Relay, an AI support-triage agent, by exposing tools for customer lookup, documentation search, ticket classification, reply, and escalation, with full guardrails and read-only mode option.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for agentic travel recommendations, exposing tools to retrieve member profiles and personalized travel recommendations with partner-specific rules and policies.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/j7018515/MCP-taxi'

If you have feedback or need assistance with the MCP directory API, please join our Discord server