Import mcp-to-cli from the rhema workspace
ci / checks (push) Failing after 14s

The crate maps MCP tool catalogs to clap commands and back, and has no
rhema dependencies — it was in-tree only because the workspace glob
reached it. Its own repository gives it its own release cadence and
its own crates.io token, scoped to this crate alone.
This commit is contained in:
vhaudiquet committed 2026-11-12 12:20:25 +01:00
commit a7e1de76ac
24 files changed
+3817

No files matched your search

+40
View File
@@ -0,0 +1,40 @@
# Fixtures
Trimmed `inputSchema` objects from real MCP servers, plus two
hand-written stand-ins, so the mapping matrix runs against real shapes.
All upstream work is MIT-licensed.
## Vendored from github/github-mcp-server
Source: <https://github.com/github/github-mcp-server>, MIT license,
`main @ 4bcdcdf8d7be`, fetched 2026-11-03. The files carry the
`inputSchema` object of the named tool, verbatim:
- `create_pull_request.json` — flat scalars, optional booleans, an
array of strings.
- `search_repositories.json` — a boolean with `default: true`
(`minimal_output`), string `enum`s (`sort`, `order`), constraint
keywords (`minimum`, `maximum`) the mapping ignores.
- `update_pull_request.json` — the `state: ["open", "closed"]` enum.
- `create_issue.json` — flat required scalars, with `x-mcp-header`
extension keys the mapping ignores.
- `projects_write_excerpt.json` — hand-trimmed from the 26-property
`projects_write` tool: `iterations` (array of objects with per-item
`required`) and `updated_field` (a `oneOf` of object variants) kept
verbatim, every other property dropped, `required` emptied because
both listed names (`method`, `owner`) were among the dropped.
## Hand-written stand-ins
Documented stand-ins for the other two servers named in the spec; the
shapes are trimmed from their actual tool definitions, not invented.
- `additional_fields.json` — the pydantic shape `sooperset/mcp-atlassian`
emits: required scalars, a `pattern` the mapping ignores, and
`additional_fields` as a three-variant `anyOf` (`object | string |
null`), which is the JSON-flag case, not the nullable case.
- `get_scene_info.json` — the FastMCP shape `ahujasid/blender-mcp`
emits for every optional parameter: `anyOf: [<T>, null]` nullable
forms (`user_prompt` with `default: ""`, `query`, `fields` as a
nullable array of strings, `limit` integer with `default: 20`) and a
required `code` string.
+20
View File
@@ -0,0 +1,20 @@
{
"type": "object",
"properties": {
"project_key": {
"type": "string",
"pattern": "[A-Z]+"
},
"summary": {
"type": "string"
},
"additional_fields": {
"anyOf": [
{ "type": "object" },
{ "type": "string" },
{ "type": "null" }
]
}
},
"required": ["project_key", "summary"]
}
+41
View File
@@ -0,0 +1,41 @@
{
"properties": {
"body": {
"description": "Issue body content (optional)",
"type": "string"
},
"owner": {
"description": "Repository owner (username or organization)",
"type": "string",
"x-mcp-header": "owner"
},
"parent_issue_number": {
"description": "Issue number of the parent issue. The new issue is created and attached to this parent in the same operation.",
"minimum": 1,
"type": "number"
},
"parent_owner": {
"description": "Repository owner of the parent issue. Must be provided with parent_repo. Omit both to use owner and repo. Only used when parent_issue_number is provided.",
"type": "string"
},
"parent_repo": {
"description": "Repository name of the parent issue. Must be provided with parent_owner. Omit both to use owner and repo. Only used when parent_issue_number is provided.",
"type": "string"
},
"repo": {
"description": "Repository name",
"type": "string",
"x-mcp-header": "repo"
},
"title": {
"description": "Issue title",
"type": "string"
}
},
"required": [
"owner",
"repo",
"title"
],
"type": "object"
}
+51
View File
@@ -0,0 +1,51 @@
{
"properties": {
"base": {
"description": "Branch to merge into",
"type": "string"
},
"body": {
"description": "PR description",
"type": "string"
},
"draft": {
"description": "Create as draft PR",
"type": "boolean"
},
"head": {
"description": "Branch containing changes",
"type": "string"
},
"maintainer_can_modify": {
"description": "Allow maintainer edits",
"type": "boolean"
},
"owner": {
"description": "Repository owner",
"type": "string"
},
"repo": {
"description": "Repository name",
"type": "string"
},
"reviewers": {
"description": "GitHub usernames or ORG/team-slug team reviewers to request reviews from",
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"description": "PR title",
"type": "string"
}
},
"required": [
"owner",
"repo",
"title",
"head",
"base"
],
"type": "object"
}
+43
View File
@@ -0,0 +1,43 @@
{
"type": "object",
"properties": {
"code": {
"description": "Execute arbitrary Blender Python code",
"type": "string"
},
"user_prompt": {
"anyOf": [
{ "type": "string" },
{ "type": "null" }
],
"default": "",
"description": "Optional natural-language prompt the operator can add"
},
"query": {
"anyOf": [
{ "type": "string" },
{ "type": "null" }
],
"description": "Optional substring to filter the reported objects"
},
"fields": {
"anyOf": [
{
"type": "array",
"items": { "type": "string" }
},
{ "type": "null" }
],
"description": "Optional list of fields to report per object"
},
"limit": {
"anyOf": [
{ "type": "integer" },
{ "type": "null" }
],
"default": 20,
"description": "Maximum number of objects to report"
}
},
"required": ["code"]
}
+73
View File
@@ -0,0 +1,73 @@
{
"type": "object",
"required": [],
"properties": {
"iterations": {
"description": "Custom iterations for 'create_iteration_field' method. Only set this when you need iterations with varying durations, breaks between them, or specific titles. Otherwise omit it: GitHub auto-creates three iterations of 'iteration_duration' days starting on 'start_date', which is the right choice for most cases.",
"items": {
"additionalProperties": false,
"properties": {
"duration": {
"description": "Duration in days",
"type": "number"
},
"start_date": {
"description": "Start date in YYYY-MM-DD format",
"type": "string"
},
"title": {
"description": "Iteration title (e.g. 'Sprint 1')",
"type": "string"
}
},
"required": [
"title",
"start_date",
"duration"
],
"type": "object"
},
"type": "array"
},
"updated_field": {
"description": "The field/value to apply, using {\"id\": 123, \"value\": ...} or {\"name\": \"Status\", \"value\": ...}; null clears the field. Required for 'update_project_item' and 'update_project_items', where one top-level field/value applies to every item in a batch. For 'update_project_item' SINGLE_SELECT fields, the name form accepts option names; the ID form expects an option ID.",
"oneOf": [
{
"additionalProperties": false,
"properties": {
"id": {
"description": "The numeric project field ID.",
"type": "integer"
},
"value": {
"description": "The value to apply. Any JSON value is accepted; use null to clear the field."
}
},
"required": [
"id",
"value"
],
"type": "object"
},
{
"additionalProperties": false,
"properties": {
"name": {
"description": "The project field name. Matching is case-insensitive.",
"type": "string"
},
"value": {
"description": "The value to apply. Any JSON value is accepted; use null to clear the field."
}
},
"required": [
"name",
"value"
],
"type": "object"
}
],
"type": "object"
}
}
}
+46
View File
@@ -0,0 +1,46 @@
{
"properties": {
"minimal_output": {
"default": true,
"description": "Return minimal repository information (default: true). When false, modern clients receive additional curated repository details, not the complete GitHub API object. Legacy clients retain full GitHub API repository objects.",
"type": "boolean"
},
"order": {
"description": "Sort order",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"page": {
"description": "Page number for pagination (min 1)",
"minimum": 1,
"type": "number"
},
"perPage": {
"description": "Results per page for pagination (min 1, max 100)",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"query": {
"description": "Repository search query. Examples: 'machine learning in:name stars:>1000 language:python', 'topic:react', 'user:facebook'. Supports advanced search syntax for precise filtering.",
"type": "string"
},
"sort": {
"description": "Sort repositories by field, defaults to best match",
"enum": [
"stars",
"forks",
"help-wanted-issues",
"updated"
],
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
}
+57
View File
@@ -0,0 +1,57 @@
{
"properties": {
"base": {
"description": "New base branch name",
"type": "string"
},
"body": {
"description": "New description",
"type": "string"
},
"draft": {
"description": "Mark pull request as draft (true) or ready for review (false)",
"type": "boolean"
},
"maintainer_can_modify": {
"description": "Allow maintainer edits",
"type": "boolean"
},
"owner": {
"description": "Repository owner",
"type": "string"
},
"pullNumber": {
"description": "Pull request number to update",
"type": "number"
},
"repo": {
"description": "Repository name",
"type": "string"
},
"reviewers": {
"description": "GitHub usernames or ORG/team-slug team reviewers to request reviews from",
"items": {
"type": "string"
},
"type": "array"
},
"state": {
"description": "New state",
"enum": [
"open",
"closed"
],
"type": "string"
},
"title": {
"description": "New title",
"type": "string"
}
},
"required": [
"owner",
"repo",
"pullNumber"
],
"type": "object"
}