Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
AuthorizationLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Esta dirección necesita una clave en un header de la solicitud, y el menú para agregar conectores no puede ponerla. Usa Claude Code, Cursor o VS Code.
Ejecuta esto en tu terminal
claude mcp add --transport http gateway https://api.identark.io/v1/mcp/rpc --header 'Authorization: your-value'Completa los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"gateway": {
"url": "https://api.identark.io/v1/mcp/rpc",
"headers": {
"Authorization": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"gateway": {
"type": "http",
"url": "https://api.identark.io/v1/mcp/rpc",
"headers": {
"Authorization": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Esta dirección necesita una clave en un header de la solicitud, y el menú para agregar conectores no puede ponerla. Usa Claude Code, Cursor o VS Code.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Authorization secreto obligatorio HTTP headerEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Todavía no hemos leído la lista de herramientas de este servidor; revisamos los endpoints por turnos.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 6 nov 2026
El nombre en el registro se verificó con el dominio identark.io (el registro comprueba quién es dueño del dominio)
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; leemos la lista de herramientas cuando revisamos el endpoint
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: Authorization
Se ejecuta en la nube del creador. Te conectas por internet sin instalar nada, pero lo que envías pasa por los servidores del creador.
El repo de GitHub cambió por última vez –, y la última versión (0.1.0) llegó al registro hace 4 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. Se conecta por URL, así que también funcionan las apps que aceptan servidores MCP remotos, como ChatGPT en modo desarrollador.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, HotCodePush
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Manage over-the-air (OTA) updates for React Native, Expo, Capacitor and Cordova apps.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
The AgentGateway Protocol — secure, scalable AI agent execution infrastructure.
When an AI agent can execute code, call APIs, or access files, it runs in a process. That process has an environment. That environment typically contains everything that can cause serious damage: LLM API keys, database credentials, AWS tokens.
The naive solution — run your agent on the same backend as your REST API — creates two problems at once:
identark solves both.
The SDK implements the AgentGateway Protocol — a clean interface between your agent logic and the outside world. Two implementations ship out of the box:
| Gateway | When to use | Credentials | History |
|---|---|---|---|
DirectGateway | Local development, CI evals | Your API key | In-memory |
ControlPlaneGateway | Production on IdentArk | Zero — none in the agent | Control plane DB |
Your agent code is identical in both environments. The switch is two lines.
pip install identark[openai]
import asyncio
from openai import AsyncOpenAI from identark import DirectGateway, Message, Role
async def main(): gateway = DirectGateway( llm_client=AsyncOpenAI(), # Your API key — not in the agent loop model="gpt-4o", )
response = await gateway.invoke_llm( new_messages=[Message(role=Role.USER, content="Hello, IdentArk!")] )
print(response.message.content) print(f"Cost: ${response.cost_usd:.6f}")
asyncio.run(main())
Change two lines. Your agent logic is untouched.
# Before (local)
from identark import DirectGateway gateway = DirectGateway(llm_client=AsyncOpenAI(), model="gpt-4o")
from identark import ControlPlaneGateway gateway = ControlPlaneGateway() # auto-detects env vars inside a IdentArk sandbox
The agent asks the control plane to act; the provider key (Stripe, Paystack, GitHub or AWS) stays in IdentArk. Grants, budgets and human approval apply before anything executes, and a reused idempotency key never acts twice.
request = await gateway.request_capability(
"payments.payment_link.create", "paystack", {"amount_minor": 1_500_000, "currency": "NGN", "customer_email": "buyer@example.com", "reference": "order-1001"}, idempotency_key="order-1001-link", )
execution = await gateway.get_capability_execution(request["request_id"])
# Core SDK only
pip install identark
pip install identark[openai]
pip install identark[anthropic]
pip install identark[gemini]
pip install identark[mistral]
pip install identark[all]
Requirements: Python 3.10+
Using TypeScript? The parity SDK ships as the zero-runtime-dependency identark npm package, with the same AgentGateway contract and structured credential sessions.
IdentArk is designed from the ground up to work with any LLM provider, including those that keep your data inside the UK or EU. The AgentGateway Protocol decouples your agent logic from the inference provider — switching providers requires changing one line.
from openai import AsyncOpenAI
from identark import DirectGateway
gateway = DirectGateway( llm_client=AsyncOpenAI( base_url="http://localhost:11434/v1", api_key="ollama", ), model="llama3.2", provider="local", # forces $0 cost tracking; inference stays on your machine )
Install Ollama: brew install ollama && ollama pull llama3.2 && ollama serve
from openai import AsyncOpenAI
from identark import DirectGateway
gateway = DirectGateway( llm_client=AsyncOpenAI( base_url="https://api.mistral.ai/v1", api_key="your-mistral-api-key", ), model="mistral-small-latest", # auto-detected as "mistral" provider )
Mistral AI is a French company. All inference runs in EU data centres, subject to EU data protection law (GDPR). Use this when UK/EU data governance requirements prohibit sending inference traffic to US-based cloud providers.
See examples/ for complete runnable scripts.
Any class implementing these four async methods is a valid gateway:
class AgentGateway(Protocol):
async def invoke_llm(self, new_messages, tools=None, tool_choice="auto") -> LLMResponse: ... async def persist_messages(self, messages) -> None: ... async def request_file_url(self, file_path, method="PUT") -> PresignedURL: ... async def get_session_cost(self) -> float: ...
Write your agent against the protocol. The implementation — local or production — is a runtime detail.
ControlPlaneGateway holds no API keys, database credentials, or cloud tokensinvoke_llm call returns cost_usd; get_session_cost() returns the running totalDirectGateway out of the boxpy.typed marker; works with mypy strict modefrom identark.testing import MockGateway
from identark.models import LLMResponse, Message, Role
async def test_my_agent(): mock = MockGateway() mock.queue_response(LLMResponse( message=Message(role=Role.ASSISTANT, content="The answer is 42."), cost_usd=0.001, model="mock", finish_reason="stop", ))
result = await my_agent(gateway=mock)
assert mock.invoke_llm_call_count == 1 assert mock.total_messages_sent == 1
| Provider | Data residency | DirectGateway | GeminiGateway | ControlPlaneGateway |
|---|---|---|---|---|
| OpenAI (gpt-4o, gpt-4o-mini, …) | US | ✓ | — | ✓ |
| Anthropic (Claude models) | US | ✓ | — | ✓ |
| Google Gemini | Varies | ✓* | ✓ | Roadmap |
| Mistral AI | Varies | ✓ | — | ✓ |
| Kimi / Moonshot | Varies | ✓* | — | ✓ |
| Azure OpenAI | Configured Azure region | ✓* | — | ✓ |
| AWS Bedrock | Configured AWS region | — | — | ✓ |
| OpenRouter | Provider-dependent | ✓* | — | ✓ |
| Ollama | Local 🏠 | ✓ | — | Not a hosted route |
| Any OpenAI-compatible endpoint | Varies | ✓ | — | ✓ (custom endpoint) |
*Via an OpenAI-compatible client/base URL. Use GeminiGateway for native Gemini SDK features.
from identark.exceptions import CostCapExceededError, RateLimitError, IdentArkError
try: response = await gateway.invoke_llm(new_messages=[...]) except CostCapExceededError as e: print(f"Cost cap of ${e.cap_usd} reached. Spent: ${e.consumed_usd}") except RateLimitError as e: await asyncio.sleep(e.retry_after_seconds) except IdentArkError as e:
raise
Full exception hierarchy: IdentArkError > GatewayError > ControlPlaneError > AuthenticationError | CostCapExceededError | SessionNotFoundError
┌─────────────────────────────────────┐
│ Your Agent Code │ │ (depends only on AgentGateway) │ └──────────────┬──────────────────────┘ │ ┌──────────▼──────────┐ │ AgentGateway │ ← Protocol (interface) │ Protocol │ └──────┬────────┬──────┘ │ │ ┌────────▼─┐ ┌───▼──────────────┐ │ Direct │ │ ControlPlane │ │ Gateway │ │ Gateway │ │ │ │ │ │ Local / │ │ Production │ │ Evals │ │ (zero secrets) │ └──────────┘ └────────┬─────────┘ │ HTTP ┌────────▼─────────┐ │ IdentArk │ │ Control Plane │ │ (holds creds) │ └──────────────────┘
Contributions are welcome. Please open an issue before submitting significant changes.
git clone https://github.com/identark/identark.git
cd identark pip install -e ".[dev]" pre-commit install pytest tests/unit/
See CONTRIBUTING.md for full guidelines.
IdentArkChatModel)IdentArkLLM)invoke_llm_stream)IdentArkNode, IdentArkStreamNode)identark-cli for one-command control plane deploymentThe IdentArk SDK is licensed under the MIT License — free for any use, including commercial and closed-source projects. See LICENSE.
The IdentArk control plane (hosted service) is proprietary. The SDK works with any AgentGateway backend, including fully self-hosted ones.
*Built on the control plane pattern described in How We Built Secure, Scalable Agent Sandbox Infrastructure.*