doubao-jev-agent
Click on "Deploy 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., "@doubao-jev-agentlist available skills"
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.
PermitMCP
v0.5.0: configured upstream MCP
Install the tagged source with python -m pip install "git+https://github.com/qinpei-dev/permit-mcp.git@v0.5.0", then run permit-mcp from any directory. The new upstream_tools, upstream_call, and upstream_approve MCP tools appear only when the server operator sets PERMITMCP_UPSTREAM_CONFIG to a trusted local JSON file and PERMITMCP_UPSTREAM_APPROVAL_TOKEN to a separate private secret. The client cannot choose the upstream executable. See the integration guide for a complete third-party example, policy rules, approval flow, limits, and test command. The older local demos remain available.
No JEV key is needed for configured upstream calls: deterministic policy decides allow, review, or deny. The original decision tools still use the local mock without JEV_API_KEY; configure your own key for real TypeSafe requests. PermitMCP does not provide shared keys or quota. The upstream integration was validated locally with an independent MCP server.
Stop AI agents from executing tools unchecked.
A lightweight execution-control layer for MCP agents with deterministic policies, JEV-backed decisions, human approval, and one-time execution permits.
Version status: v0.5.0 adds selected third-party stdio MCP tools through local operator configuration. The v0.4.0 fixed read_sample proof remains available. This is not a general MCP proxy or operating-system sandbox. The real JEV API was not revalidated for this release.
Controlled Agent Showcase
SAFE ACTION ALLOW → permit issued → executed
SENSITIVE ACTION REVIEW → waits for caller approval → executed
FORBIDDEN ACTION DENY → no permit → executor not calledView the real terminal output or run the complete demonstration:
python -m examples.showcaseThe showcase uses real sandbox file tools and a control-specific offline decision mock. It copies README.md into a disposable sandbox, checks that a reviewed file stays unchanged until explicit caller approval, and verifies that ../secret.txt never reaches the decision provider or executor. No API key is needed.
Execution path
ActionProposal → ControlChain (deterministic policy → optional decision provider → ExecutionPermit → executor) → ToolResult
Policy DENY stops before JEV. Policy REVIEW waits for caller approval. ALLOW receives a one-use permit. These outcomes are this project's application-layer interpretation of TypeSafe Choice, not a separate TypeSafe Gate primitive. See Controlled Agent for sandbox limits and the machine-readable trace.
JEV is an optional decision provider. It does not execute tools or override deterministic policy. A policy must explicitly project safe arguments before a provider sees them; otherwise the control decision fails closed. Permits bind the complete proposal digest, expire after one minute by default, and are consumed once at the executor boundary.
The v0.4.0 upstream proof starts a separate repository-owned stdio MCP process and makes a real tools/call for read_sample through the same chain. Run it offline with python -m examples.upstream_mcp_demo. See Upstream MCP proof for scope, failure handling, and limits.
Related MCP server: skillsmcp
Quick Start
Requires Python 3.11 or later. Clone PermitMCP and run from the repository root:
git clone https://github.com/qinpei-dev/permit-mcp.git
cd permit-mcp
pip install -r requirements.txt
python -m examples.showcase
python -m examples.upstream_mcp_demo
python -m pytest -qFor MCP setup and the optional real JEV API, see MCP. The agent_run skill workflow remains available.
Features
Exposes JEV decisions, skill execution, and skill discovery as MCP tools.
Adds a permit-gated controlled Agent loop with local sandbox file tools, explicit review, and a machine-readable trace.
Uses the TypeSafe JEV API when
JEV_API_KEYis configured and validates that each returned choice is allowed.Uses a deterministic local mock without a key, so the project can be tried without external credentials.
Includes a FastAPI service, Docker packaging, and demo scripts alongside the MCP server.
Provides an extensible skill registry and executor.
Why Decision Layer?
Modern AI Agents often rely on LLMs for both generation and decision making. This project separates decision making into a dedicated, lightweight decision layer for structured decisions and predictable routing.
Without Decision Layer:
Task
↓
LLM decides
↓
ExecutionWith JEV:
Task
↓
JEV Decision Layer
↓
Skill Routing
↓
ExecutionThe MCP client provides the task and allowed choices. JEV returns a choice that is checked against those options before routing. LLMs can still generate content and manage the wider Agent workflow. See Decision Routing Examples for examples and limits.
Architecture
The following diagram shows the earlier decision-routing path; the permit-gated execution path is described above and in Controlled Agent.

MCP handles communication. JEV makes a structured decision from the client's allowed choices. The Skill Router selects the registered skill, and the executor runs its local workflow.
MCP
MCP (Model Context Protocol) provides a standard way for AI clients to connect with external tools and services. This MCP server exposes jev_decide, agent_run, list_skills, controlled_agent_run, and approve_action.
Install the dependencies, then add the following server entry to your MCP host configuration. Start the host with the repository root as its working directory so Python can import src.
{
"mcpServers": {
"permit-mcp": {
"command": "python",
"args": ["-m", "src.mcp.server"],
"env": {}
}
}
}You can also copy mcp.json.example as a starting point. For desktop setup steps, see Doubao MCP Setup. The MCP server uses stdio transport and provides:
Tool | Purpose |
| Choose from caller-provided options using JEV. |
| Select a registered skill, execute it, and return the decision and result. |
| List the skills registered on this server. |
| Run local file actions through deterministic policy, JEV Choice, permits, and the sandbox executor. |
| Approve and resume one action returned with |
The v0.2.1 MCP connector was tested with Doubao Desktop and Antigravity. The new controlled tools have automated FastMCP coverage but have not yet been manually validated in those clients. See MCP Client Compatibility for details. Each user runs their own local MCP server; this project does not provide a shared remote MCP service or JEV quota.
Use the real JEV API
Request your own JEV API key through TypeSafe. Set it in the server process environment or in a private, untracked .env file in the repository root:
JEV_API_KEY=your_own_keyThen run the MCP server with python -m src.mcp.server, or run the real API demo:
python -m examples.real_jev_demoWithout a key, both use the local mock. With a key, requests go directly from your machine to TypeSafe over HTTPS using your account and quota. Never commit your .env file or put a key in an MCP configuration that you share.
Legacy / Earlier examples
The included career, paper, coding, research, and writing skills are simulated workflows. They demonstrate routing and execution; they do not call external services or perform the described work themselves. The Doubao adapter is an extension contract, not a live Doubao API integration.

Tested MCP Clients:
Doubao Desktop MCP Connector
Antigravity MCP Client
Real MCP call → Real TypeSafe JEV API → Decision result.
Run a decision and local skill execution from the repository root:
python -m examples.agent_run_demoIn mock mode, the example selects career_skill and shows the executor result:
JEV: career_skill (91.00%)
Executor: career_skill.execute()
结果: Career analysis workflow executedNo API key is needed for this demo. With JEV_API_KEY set, it calls the real TypeSafe JEV API and the decision may differ.
Run the new file-execution loop from the repository root:
python -m examples.controlled_agent_demoThe deterministic demo reads the actual README.md, creates output/summary.md inside the configured sandbox, and prints a structured trace. The generated output/ directory is ignored by Git. Control runs without a decision provider by default and stays offline; pass --real-jev to use the configured JEV_API_KEY. If you run the demo again with an existing output file, the action waits for review; pass --approve-existing only when you intend to overwrite it. The tool execution itself is real.
Examples
Run these commands from the repository root:
python -m examples.skill_router_demo
python -m examples.doubao_demo
python -m examples.agent_router_demo
python -m examples.agent_run_demo
python -m examples.real_jev_demoThe demos use the local mock by default. agent_run_demo and real_jev_demo use TypeSafe JEV when JEV_API_KEY is set. No demo includes a bundled API key or project-provided quota.
Decision Routing Examples
The routing flow is Task → JEV Decision → Selected Skill → Execution Path. These examples show the decision step using the environment-selected JEV client; they stop at the choice rather than executing a skill. With no JEV_API_KEY, the local mock provides a deterministic demonstration; with a key, the choice comes from the real TypeSafe JEV API and may differ. Run from the repository root:
Agent Routing:
python -m examples.use_cases.career_decisionCoding Decision:
python -m examples.use_cases.coding_decisionResearch Decision:
python -m examples.use_cases.tool_selection
For the reasoning behind these examples, read Decision Routing Examples.
HTTP API example
Set two different, high-entropy tokens in your private .env as PERMITMCP_EXECUTION_TOKEN and PERMITMCP_APPROVAL_TOKEN. Both are required; an absent token or identical values disable all protected HTTP endpoints. Give the execution token only to the caller that runs tasks. Keep the approval token with a separate, trusted operator; never give it to an Agent. With the API running locally, send a task:
curl -X POST http://127.0.0.1:8000/api/v1/agent/run \
-H "Authorization: Bearer $PERMITMCP_EXECUTION_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"task":"帮我分析这个招聘岗位"}'In mock mode, the response contains the selected skill and execution result. All POST endpoints require the execution token except /api/v1/controlled-agent/{run_id}/approve, which requires the approval token. /health stays public. The service also provides:
Method | Path | Purpose |
|
| Check service health. |
|
| Choose from caller-provided options. |
|
| Route a task to a built-in skill. |
|
| Route a task to an agent. |
|
| Decide a skill and execute its workflow. |
|
| Run actions through the controlled execution loop and return a trace. |
|
| Approve the matching action waiting for review. |
Decision Routing Evaluation
See the Decision Routing Evaluation. Run python benchmark/run_benchmark.py to regenerate it locally. The 10 example tasks test the decision routing flow, example task matching, confidence, and local demo execution for career, coding, research, and writing skills. The decision backend is a deterministic local mock; its latency does not represent real API latency or LLM generation speed. The evaluation makes no performance or cost claim. No paid model or external research service is called.
Release status
Version 0.4 includes the reusable control chain and a fixed upstream stdio MCP example. Version 0.4.1 adds HTTP authentication and corrects the API version metadata.
Docker
docker compose up --buildThe API is available at http://localhost:8000. Docker Compose binds the host port to 127.0.0.1; mock mode is the default. Put both token variables in your private .env; Compose forwards them to the container. For direct Docker use, run docker build -t permit-mcp:0.4.1 . and docker run -p 127.0.0.1:8000:8000 --env-file .env permit-mcp:0.4.1. The Dockerfile listens on 0.0.0.0 inside the container so Compose's port forwarding works; docker run -p 8000:8000 publishes to all host interfaces. For direct Uvicorn startup, use python -m uvicorn src.main:app --host 127.0.0.1 --port 8000 with both token variables set in the process environment.
Security and deployment
Use your own JEV API key. The project has no shared credentials or quota.
Keep
.envand any MCP host configuration containing a key private.Protected HTTP endpoints use separate Bearer tokens for execution and approval. This is a two-role shared-secret boundary, not a multi-user identity system or proof that a human reviewed an action. A holder of the approval token can approve a matching pending action;
run_idandaction_idalone grant no permission. Rotate exposed tokens and use TLS and an appropriate access gateway for remote deployments.Keep the approval token out of Agent prompts, tools, logs, and MCP client configuration. The stdio MCP server has a separate local-process trust boundary and is not changed by HTTP authentication; launch it only for trusted local clients.
Real JEV requests go directly from your server to
https://api.typesafe.ai/v1/systemoneover HTTPS.The local path policy is not operating-system isolation. Approval and permits are in memory, and the upstream sample is not a production MCP proxy.
Contributing
Run python -m pytest before submitting changes. See CONTRIBUTING.md for the skill extension steps and contribution ideas.
Extending Skills
Developers can extend the server's local skill registry by adding a BaseSkill subclass with a name, description, and execute(input) method, then registering an instance with SkillRegistry. See the runnable Custom Skill Example. To make a new skill available to the default MCP server, add it to create_default_registry() as described in CONTRIBUTING.md.
See the Security Policy for vulnerability reporting and credential guidance.
License
Distributed under the MIT License.
Available Tools
5 toolsagent_runC
Run JEV skill selection followed by local Skill Executor execution.
| Name | Required | Description | Default |
|---|---|---|---|
| task | 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 hints that local code execution occurs, but says nothing about side effects, sandboxing, permissions, whether the run is reversible, or what happens on failure — critical omissions for a tool that executes skills.
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?
One tight sentence with zero filler, front-loading the action. It is under-specified rather than bloated, which this dimension should not penalize heavily.
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 an action-executing tool with no annotations, no output schema, and 0% parameter coverage, the description is too thin to let an agent call it confidently or predict results.
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 0% and the single 'task' parameter is not described at all in the description. The agent gets no hint about format, granularity, or expected content of the task string.
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 concrete verb ('Run') and describes a two-stage pipeline: JEV skill selection followed by local Skill Executor execution. It is more than a tautology, but the jargon ('JEV', 'Skill Executor') is unexplained and it never distinguishes itself from the very similar sibling 'controlled_agent_run'.
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?
No indication of when to use this versus 'controlled_agent_run', 'jev_decide', or 'list_skills'. The presence of a near-twin sibling makes the absence of any routing/exclusion guidance a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_actionC
Approve and resume one action currently waiting for caller review.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| action_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 disclosure burden. It implies a state mutation (approve and resume), but says nothing about required permissions, whether approval is reversible, what happens to the run after resumption, or failure behavior for an invalid/stale action id.
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; the operation and its targeting condition come first. It is efficient, though its brevity is partly a symptom of under-specification rather than disciplined editing.
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 mutation tool with no annotations, no output schema, and two undocumented required parameters, the definition is too thin. An agent cannot determine permissions, preconditions beyond 'waiting for review', or the result of a successful approval.
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?
Both parameters are required with 0% schema description coverage, and the description explains neither run_id nor action_id. An agent must guess that action_id identifies the waiting action and run_id scopes it to a workflow run; nothing in the text compensates for the schema 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 pair (approve and resume) and a specific resource (one action currently waiting for caller review), so the agent knows exactly what operation this performs. It does not, however, differentiate itself from siblings like jev_decide or agent_run, which could plausibly involve approval flows.
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 phrase 'currently waiting for caller review' implies a precondition and thus an implied usage context: only call this on actions already paused for human/caller approval. No alternative tool is named and no when-not guidance is given, so usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
controlled_agent_runC
Run proposed local actions through policy, JEV, permits, and sandbox tools.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| max_steps | No |
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 does disclose that actions are routed through policy, permits, and a sandbox, which implies gating and possible blocking of actions - genuine behavioral context beyond the name. But it says nothing about what happens when a permit is denied, whether approval (approve_action) is required, state changes, or failure modes.
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; the pipeline order (policy, JEV, permits, sandbox) is informative. It is slightly jargon-dense with no expansion of JEV, but structurally efficient.
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 two-parameter orchestration tool with no annotations, no output schema, and 0% schema coverage, the description is far too thin. It omits return behavior, what a controlled run produces, how blocking/permit denial is surfaced, and how it chains with jev_decide or approve_action.
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 0% for both parameters, and the description offers no explanation of 'task' or 'max_steps'. 'Proposed local actions' loosely hints at the task input, but max_steps (default 5) is entirely undocumented, so the description does not 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?
The description pairs a verb ('Run') with a resource ('proposed local actions') and names the machinery involved (policy, JEV, permits, sandbox), so the general intent is inferable. However, it does not distinguish this tool from the sibling agent_run, and 'JEV' is unexplained jargon even though jev_decide exists as a sibling. Purpose is vague rather than specific.
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 agent_run, jev_decide, or approve_action, and no prerequisites or exclusions are given. The reader can only guess that this is the 'controlled' counterpart to agent_run from the name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jev_decideD
Make a constrained decision with the JEV Decision Engine.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| options | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure but provides none. It does not state whether the tool is read-only, has side effects, requires authentication, or what the output looks like.
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 sentence with no wasted words, but it is severely under-specified for a tool with two required parameters. Similar to the 'Process' calibration example, brevity here reflects missing content rather than good conciseness.
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 no output schema annotations, and zero parameter documentation, the description is completely inadequate. An agent cannot determine what a 'constrained decision' means, how to format inputs, or what to expect as a result.
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 0% and the description does not explain the 'task' or 'options' parameters. It adds no meaning beyond the bare parameter names.
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 ('Make') and a resource ('decision'), but 'constrained decision with the JEV Decision Engine' is undefined jargon. It does not clarify what kind of decision or how it differs from sibling tools like agent_run.
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 versus alternatives. The single sentence offers no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsA
List skill names supported by this PermitMCP instance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden alone. It usefully discloses the scope (skills supported by 'this instance', i.e., instance-specific rather than global), but says nothing about permissions, pagination, ordering, or whether listing can fail. For a low-risk enumeration tool the gap is modest but real.
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 that fully states the action, the returned artifact, and the scope, with 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?
With zero parameters and an output schema present, the description need not explain return values, and it correctly confines itself to the operation and its instance-specific scope. It is nearly complete for a simple discovery tool, missing only permission/side-effect framing.
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 takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond the schema.
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 verb (list) and resource (skill names) with an explicit scope (this PermitMCP instance), so an agent immediately knows what it returns. It does not need to differentiate from siblings, which are entirely different operation types (jev_decide, agent_run, approve_action).
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 explicit when-to-use guidance, no prerequisites, and no mention of alternatives or follow-up tools. The usage is only weakly implied by the name and the fact that it enumerates available skills.
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
agent_run - First observed
approve_action - First observed
controlled_agent_run - First observed
jev_decide - First observed
list_skills
TDQS
Scored across 5 tools
list_skills and approve_action are clearly distinct, while jev_decide, agent_run, and controlled_agent_run overlap around JEV execution. The descriptions do differentiate the latter three by scope, but an agent must read carefully to choose between plain and controlled runs.
All names use snake_case lower_case, but the structural pattern is mixed: list_skills and approve_action are verb_noun, jev_decide and agent_run invert to noun_verb, and controlled_agent_run adds an adjective. Readable, but not a predictable convention.
Five tools is well-scoped for a JEV/PermitMCP agent server. Each tool maps to a distinct phase: list, decide, run, controlled run, and approve.
The core run-and-approve lifecycle is present, but obvious operations are missing: no reject/deny action, no list pending approvals, no action status query, and no skill detail lookup. These gaps create dead ends in the approval workflow.
Maintenance
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Governed AI agent skills — one library, distributed to devs and exposed to remote agents over MCP.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Related MCP Servers
- AlicenseAqualityAmaintenanceA universal MCP server that enables any LLM or AI agent to access expert skills from your local filesystem.3525 npm39MIT
- AlicenseAqualityDmaintenanceExposes Agent Skills to AI agents as MCP tools, enabling discovery and activation of skill instructions for coding agents.327MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that lets AI agents search, view, install, and validate skills from the skillhub registry through tool calls.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to discover, retrieve, and invoke 80+ SkillHub practical skills as standardized MCP tools over stdio, covering coding, office, content creation, data analysis, and security operations.MIT No Attribution