phases-agents
phases-agents
English · Français

Локальный MCP-сервер, который детерминированно обнаруживает, проверяет и выбирает навыки. Только стандартная библиотека Python, без зависимостей времени выполнения.
Один сервер. Пять инструментов. Ничего не выполняется у вас за спиной.
Зачем
ИИ-агенты импровизируют. Задайте один и тот же вопрос дважды — и вы получите два разных плана. Для мозгового штурма это нормально, но для аудита и комплаенс-работы — неприемлемо.
phases-agents устраняет импровизацию. Он профилирует локальный проект, проверяет каталог навыков на соответствие строгому контракту и возвращает план, который можно воспроизвести. Одинаковая цель, одинаковый каталог, одинаковые параметры — одинаковое решение.
Related MCP server: AAS Core (agentic-awesome-skills-mcp)
Принцип

configured root identifiers
→ bounded discovery
→ official validation
→ immutable registry
→ verified cache
→ detector profile
→ deterministic selection
→ MCP planСервер выбирает и предоставляет. Вызывающая модель читает выбранные навыки и решает, что с ними делать, используя собственные инструменты. Сервер никогда не выполняет навык.
Архитектура
Файл | Роль |
| официальные контракты и проверенные снимки |
| ограниченное локальное обнаружение |
| доверенные корни и проверенный кэш |
| неизменяемые типы и лимиты |
| проверенный неизменяемый реестр |
| локальный профиль цели |
| детерминированный выбор и упорядочивание |
| транспорт JSON-RPC/MCP |
| словарь возможностей клиента |
| версионируемый словарь профильных фактов |
| правила пробелов ( |
Нормативный контракт находится в core/SKILLS_CONTRACT.md (на французском).
Быстрый старт
Пример пакета поставляется в examples/skills/. Три шага дают реальный план.
git clone https://github.com/Cherridsaid/phases-agents && cd phases-agentsСоздайте skills-roots.json, указывающий на корень примера:
{
"config_version": "1.0",
"roots": [
{ "id": "demo", "path": "/absolute/path/to/phases-agents/examples/skills" }
]
}python server.py --skills-config /absolute/path/to/skills-roots.jsonСервер читает JSON-RPC построчно из стандартного ввода. Вызов phases_agents_plan для Python-проекта затем выбирает hello-python:
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"phases_agents_plan",
"arguments":{"root_ids":["demo"],"target":"/absolute/path/to/a/project",
"today":"2026-08-27","plan_version":"B3",
"client_capabilities":["filesystem_read","filesystem_search"]}}}Сосуществуют два формата планов. "B3" обозначает версионированный формат, а не версию сервера; его официальная схема — core/PLAN_B3_SCHEMA.json. Используйте его для новой работы. Без plan_version устаревший формат возвращает плоский список шагов; он сохранён, чтобы не сломать существующих вызывающих клиентов, и будет объявлен устаревшим перед удалением. client_capabilities принимается только в B3, поскольку заявление о том, что умеет клиент, имеет смысл только в этом формате.
Подключение MCP-клиента
Claude Code (.mcp.json в корне вашего проекта):
{
"mcpServers": {
"phases-agents": {
"command": "python",
"args": [
"/absolute/path/to/phases-agents/server.py",
"--skills-config",
"/absolute/path/to/skills-roots.json"
]
}
}
}Codex использует ту же пару command/arguments в своём конфигурационном файле. Ни токен, ни переменная окружения не требуются.
MCP-инструменты
detect(target)
list_skills(root_ids, today)
get_skill(root_ids, today, skill_id)
plan(root_ids, target, today, constraints?)
plan(root_ids, target, today, plan_version, client_capabilities?)
refresh_skills(root_ids, today)today внедряется, а не считывается с часов, поэтому каждый вызов воспроизводим. get_skill принимает идентификатор, а не путь, и его содержимое берётся из проверенного снимка. Абсолютные пути и обнаруженные секреты маскируются в публичном выводе. Любой закодированный JSON-RPC-ответ остаётся в пределах 1 MiB.
Первый вызов создаёт проверенный реестр. «Тёплые» вызовы проверяют метаданные, не перечитывая содержимое. refresh_skills принудительно пересобирает реестр.
Создание пакета навыка
Каждый пакет — это прямой дочерний элемент корня и содержит как минимум:
<root>/<skill-id>/SKILL.md
<root>/<skill-id>/phases.jsonСамый быстрый способ начать — скопировать examples/skills/hello-python/ и переименовать идентификатор.
Метаданные SKILL.md
Разрешены пять ключей. Все необязательные, все проверяются при наличии.
Ключ | Ограничение |
| должен быть равен |
| ограниченный свободный текст |
| должен быть равен |
| свободная авторская идентичность, без невидимых символов |
|
|
Четырнадцать обязательных разделов
Каждый из них — заголовок Markdown (##) в любом порядке. Названия разделов — на французском, потому что они принадлежат контракту; содержимое вы можете писать на любом языке.
Loi centrale · Ce que ce skill fait · Ce que ce skill ne fait pas · Conditions d'activation · Conditions d'exclusion · Capacites necessaires · Interdictions · Methode d'audit · Contrat de preuve · Format de sortie · Conditions de blocage · Limites connues · Exemples d'entree · Exemple de sortie attendue
Поля phases.json
Все поля обязательны: schema_version, id, version, title, description, domain, project_types, platforms, activation, exclusions, requires_capabilities, optional_capabilities, forbidden_capabilities, execution_mode, human_approval, output_schema, rules_path, references_path, scripts_path, tests_path, files.
output_schema использует символическую форму core:SCHEMA_NAME.json.
Закрытые словари
project_types должен пересекаться с тем, что может выдать детектор: apk, python, skill_package, solana, web.
activation.any использует профильные факты: collects_personal_data, has_api, has_apk, has_authentication, has_database, has_ecommerce, has_eu_context, has_file_upload, has_javascript, has_python, has_rust, has_skill_packages, has_solana, has_source_code, has_typescript, has_web, uses_ai, uses_payments.
requires_capabilities, optional_capabilities и forbidden_capabilities используют: browser, dependency_installation, filesystem_read, filesystem_search, filesystem_write, human_question, shell, target_code_execution, web.
Предоставляемые возможности — это открытый словарь: каждый каталог называет то, что он даёт, и контролируется только форма (^[a-z][a-z0-9_]{0,63}$). Закрыты только клиентские возможности, потому что они описывают протокол, а не вашу предметную область.
Значение domain, равное legal, juridique, regulatory или compliance, запускает особый режим: каждая цитируемая норма должна содержать официальный источник, юрисдикцию и дату проверки.
Что схема описывает и о чём умалчивает
SKILL_MANIFEST_SCHEMA.json описывает форму phases.json: обязательные поля, типы, закрытые словари.
Движок схем намеренно минимален. Он применяет enum, minLength и minItems и больше ничего: ни pattern, ни if/then, ни oneOf. Схема, использующая эти ключевые слова, будет отвергнута сама.
Это важно: условные правила живут в validator.py, который остаётся источником истины. Пример — правило версии: provides_capabilities запрещено в манифесте 1.0 и обязательно в 1.1. Это правило применяется и тестируется, но его нельзя выразить в схеме. Не читайте required как весь контракт.
Пакет только с SKILL.md не проходит. Недопустимый пакет блокирует реестр, а не деградирует молча.
Идентичность
phases.json.id — это идентичность, и SKILL.md.name должен совпадать с ней. Директория должна иметь тот же ключ. Ключи нормализуются через NFKC, а затем casefold, поэтому гомоглифы не могут протащить вторую идентичность. Любое столкновение блокирует всю сборку; ни один пакет не выбирается произвольно.
Выбор

Каждый допустимый навык в реестре попадает ровно в одну категорию, со своим обоснованием. Ничто не отбрасывается молча.
Единственный доказанный автоматический сигнал:
project_types ∩ profile.typesПлатформа, домен и возможности фильтруют только тогда, когда вызывающий клиент задаёт эти ограничения. Запрещённая возможность отклоняет навык. Никакая семантическая оценка не выдумывается, а план сортируется по идентификатору.
Пустой план явно допустим: он содержит NO_COMPATIBLE_SKILL.
План B3 классифицирует каждый установленный навык по категориям skills_selected, skills_not_applicable и skills_blocked; каждый навык появляется ровно один раз. skills_missing перечисляет возможности, для которых нет исполняемого провайдера, на основе только подтверждённых фактов. Пробел никогда не доказывает несоответствие — он говорит, что признанный необходимым аудит не покрыт.
Лимиты
максимум 16 корней
только один уровень вложенности
максимум 1 000 пакетов
10 000 записей на корень
SKILL.mdограничен 256 KiBодин справочный материал ограничен 256 KiB, в сумме — 1 MiB
снимки ограничены 16 MiB
публичный результат ограничен 1 MiB
100 проблем на пакет
отпечаток ограничен 100 000 узлов
Вызывающие клиенты могут только понижать эти лимиты, но никогда не повышать.
Рантайм-ограничения
Python
>=3.11нет сторонних зависимостей в рантайме
нет неявного доступа к сети
нет рантайм-оболочки
целевой код не выполняется
нет неявных часов
нет телеметрии
ни один навык не загружается
pytest — это только зависимость для разработки.
Тесты
python -m pytest -qОжидаемый результат:
729 passed, 2 skipped
0 failedНормативные тексты извлекаются с окончаниями строк LF, что закреплено в .gitattributes. Пара тестов символических ссылок Windows пропускается: для них требуется локальная привилегия Windows. Windows-джанкшены действительно тестируются.
Уровень доказательности
Валидатор подтверждает только одно:
STRUCTURALLY_VALIDATEDОн не проверяет реальную цель. TARGET_VERIFIED остаётся запрещённым в V1.
Безопасность
Загрузчик отвергает точки повторного анализа (reparse points). Чтения ограничены и локализованы. Вывод отсортирован и детерминирован.
Одно проектное решение заслуживает вашего внимания: detect и plan принимают путь target, который не ограничен настроенными корнями, поскольку смысл — профилировать произвольный проект. Запускайте этот сервер под учётной записью, чей охват вы принимаете, и подключайте его только к доверенному клиенту. Полная модель угроз описана в SECURITY.md.
Не-гарантии
нет универсальной семантической релевантности
ни один внешний навык не одобряется автоматически
нет аудита содержимого скриптов
нет подлинного доказательства реально подключённой цели
нет полной атомарности Windows
нет универсального распознавания HTML
нет универсального обнаружения секретов
нет гарантированного юридического соответствия
нет маркетплейса, нет удалённых источников
Лицензия
Apache-2.0. Смотрите LICENSE и NOTICE.
Available Tools
5 toolsphases_agents_detectC
Detecte localement le profil borne d'une cible. N'execute aucun fichier.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Chemin absolu local du projet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and it does add one meaningful trait: the operation is local and executes nothing, implying a safe non-executing read. It says nothing about permissions, whether any state is written, rate limits, or what the detection result contains, so it falls short of the disclosure a no-annotation tool warrants.
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?
Two short sentences, front-loaded with the action and followed by the key constraint, with no filler. It is efficient, though the terse phrasing comes at the cost of the clarity noted elsewhere.
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 single-parameter detection tool with no output schema and no annotations, the description is minimally viable but leaves gaps: it never defines what a "profil borne" comprises, what the caller receives, or how the result should be used. The absence of an output schema means more, not less, explanation was needed.
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?
There is a single parameter with 100% schema description coverage ("Chemin absolu local du projet"), so the schema already fully documents its meaning and the baseline is 3. The description adds no syntax, format, or path-constraint detail beyond what the schema supplies.
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 verb ("Detecte") and an object ("le profil borne d'une cible"), so its basic function is identifiable. However, "profil borne" is undefined jargon and the scoping term "localement" is the only differentiator, leaving ambiguity about what is actually detected. It does not explicitly contrast with siblings like phases_agents_plan or phases_agents_list_skills.
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 reach for this tool versus the other phases_agents_* siblings, nor any stated prerequisites beyond the required absolute path. The only usage-adjacent statement is a safety constraint ("N'execute aucun fichier"), which is behavioral rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phases_agents_get_skillC
Retourne le contenu borne d'un skill valide par identifiant. Aucun chemin libre n'est accepte.
| Name | Required | Description | Default |
|---|---|---|---|
| today | Yes | Date ISO YYYY-MM-DD injectee. | |
| root_ids | Yes | ||
| skill_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It hints at two behaviors — content is 'borne' (bounded) and only identifiers (no free paths) are accepted — but never explains the bound, what happens on an invalid/unknown skill_id, permission requirements, or the return shape.
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?
Two tight sentences with the core purpose front-loaded and no padding. It is efficient, though extremely sparse for a three-required-parameter tool.
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?
With three required parameters, no annotations, no output schema, and no explanation of root_ids or today, the description is too thin for an agent to call this tool confidently. The one behavioral constraint it does give ('aucun chemin libre') is not enough to cover the gaps.
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 only 33%: 'today' is documented in the schema while 'root_ids' and 'skill_id' are not. The description says lookup is 'par identifiant' but never explains what root_ids (1–16 ids) is for or why an injected 'today' is required, so it fails to compensate for the coverage gap.
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?
States a specific verb and resource ('Retourne le contenu ... d'un skill') and scopes it by 'identifiant', which separates it from the sibling phases_agents_list_skills (listing) without naming it. The qualifier 'valide' adds a validity condition, but no explicit sibling differentiation is given.
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 statement of when to use this tool versus phases_agents_list_skills, phases_agents_refresh_skills, or phases_agents_plan. 'Aucun chemin libre n'est accepte' is an input constraint, not usage guidance. The agent must infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phases_agents_list_skillsC
Decouvre et liste uniquement les packages de skills valides.
| Name | Required | Description | Default |
|---|---|---|---|
| today | Yes | Date ISO YYYY-MM-DD injectee. | |
| root_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not explain what makes a package 'valide', whether discovery scans the filesystem or a cache, whether it is read-only, or how it relates to refresh_skills; only a vague 'découvre' hint is offered.
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 compact sentence with no filler, and the filtering constraint is included. It is terse to the point of being under-specified rather than bloated.
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?
With no annotations, no output schema, and half the parameters undocumented, the description does not provide enough for an agent to call this correctly or interpret results — notably it never says whether 'valides' filtering has side effects or what is returned.
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% and the description adds no parameter information at all. In particular 'root_ids' is undocumented in both the schema and the description, leaving the agent to guess what roots to search and what identifier format they take.
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?
States a specific verb+resource: 'Découvre et liste ... les packages de skills valides', with a scope qualifier ('uniquement ... valides') that hints at filtering. It does not name or contrast with the sibling get_skill or refresh_skills, so sibling differentiation is left to inference.
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 when-to-use guidance, no prerequisites, and no mention of the alternatives among siblings (detect, get_skill, plan, refresh_skills). The agent must guess whether listing is a discovery step or a cached read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phases_agents_planB
Detecte une cible, charge le registre valide et rend un plan deterministe. N'execute aucun skill.
| Name | Required | Description | Default |
|---|---|---|---|
| today | Yes | Date ISO YYYY-MM-DD injectee. | |
| target | Yes | Chemin absolu local du projet. | |
| root_ids | Yes | ||
| constraints | No | ||
| plan_version | No | ||
| client_capabilities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses two behavioral traits: it loads a valid registry and it causes no side effects because it executes no skills. Beyond that it says nothing about failure modes, preconditions, or the determinism guarantees referenced around 'plan_version'.
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?
Two short, front-loaded sentences with zero filler. Purpose and the no-execution constraint come first. It is efficiently written, though arguably too terse given the tool's parameter complexity.
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 6 parameters, a nested object, no annotations, and no output schema, the description is far too thin. It does not explain how constraints, plan_version, or client_capabilities shape the plan, nor what the returned plan contains, leaving an agent without enough context to invoke it confidently.
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 only 33% across 6 parameters, including a nested 'constraints' object, yet the description adds no meaning to any parameter. Words like 'cible' and 'registre valide' loosely map to target/root_ids, but no parameter is actually explained, so the coverage gap is not compensated.
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 sequence ('Detecte une cible, charge le registre valide et rend un plan deterministe') with a clear deliverable: a deterministic plan. The negation 'N'execute aucun skill' clarifies its scope versus execution-oriented siblings, but it does not name an alternative tool explicitly, so sibling differentiation is only implicit.
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 clause 'N'execute aucun skill' implies the tool is for planning rather than execution, giving an implied when-to-use signal. However, it never states when to prefer this over phases_agents_detect or the registry/skill tools, so usage is left largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phases_agents_refresh_skillsC
Reconstruit explicitement un registre depuis les racines autorisees.
| Name | Required | Description | Default |
|---|---|---|---|
| today | Yes | Date ISO YYYY-MM-DD injectee. | |
| root_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a rebuild (likely a mutation that overwrites existing state) and hints at authorization via "racines autorisees", but never states whether existing data is destroyed, whether permissions are required, or if the operation is idempotent.
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 with no filler or repetition. It is efficiently written, though the terseness comes at the cost of the missing details scored elsewhere.
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 mutating, no-annotation, no-output-schema tool, the definition leaves too much unsaid: what the rebuilt registry contains, the effect on existing skills, and what is returned. An agent cannot safely decide whether to call this.
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%: "today" is documented in the schema, but "root_ids" has no description. The phrase "racines autorisees" loosely signals that root_ids must be authorized roots, but adds no format, cardinality (max 16), or relationship detail beyond what the schema already enforces.
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 has a concrete verb ("Reconstruit") and object ("un registre"), but the object does not match the tool name: it says "registre" while the tool is about skills. Nothing distinguishes it from siblings like phases_agents_detect or phases_agents_list_skills, leaving the agent to guess what is actually being rebuilt.
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 when-to-use guidance, no prerequisites, and no mention of the sibling tools (detect/get_skill/list_skills/plan) that could be alternatives. The adverb "explicitement" hints the operation is deliberate but does not tell the agent when that is warranted.
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.
5 tool updates
v0.5.0- First observed
phases_agents_detect - First observed
phases_agents_get_skill - First observed
phases_agents_list_skills - First observed
phases_agents_plan - First observed
phases_agents_refresh_skills
TDQS
Scored across 5 tools
Each tool targets a distinct operation: detect (profile), get_skill (read one), list_skills (enumerate), refresh_skills (rebuild registry), plan (produce a plan). The one soft overlap is that plan already performs detection, so an agent might wonder when to call detect versus plan directly.
All tools share the consistent phases_agents_ prefix followed by clear snake_case verbs/verb_noun forms (detect, get_skill, list_skills, plan, refresh_skills). No mixing of conventions.
Five tools is well-scoped for a skill-registry/planning domain, covering discovery, retrieval, detection, planning, and registry refresh without redundancy.
The surface covers the full read-side lifecycle: enumerate skills, read a skill, refresh the registry, detect a target, and produce a plan. It is read-only by design (no skill authoring/editing), which is a minor gap but consistent with the stated bounded-execution purpose.
Maintenance
Related MCP Connectors
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
Discover, plan and run tools across your connected business systems through one OAuth MCP endpoint
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables coding agents to search, recommend, and validate a stack of reusable skills from a local catalog, producing deterministic plans without modifying the project.6,024 npm1MIT
- AlicenseNot gradedqualityCmaintenanceA local, read-only MCP server that lets coding agents search the complete AAS skill catalog, compose and validate agent-chosen skill stacks, and generate reproducible, reviewable plans without uploading project code.6,024 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to search a local catalog, load skills, inspect MCP tool schemas, and invoke selected tools through a single unified MCP tool, reducing per-request overhead.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search, retrieve, score, compose, and verify reusable agent skills from the SkillForge registry via MCP.9 npmMIT