IdentArk Gateway

io.identarkPublished by identark.ioOfficial publisherv0.1.0Updated Nov 2, 2026

Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.

VerifiedStreamable HTTPWeb executableFinanceSecurity & MonitoringAI & ML

Overview

AI-generated overview

Remote IdentArk gateway that lets an assistant run LLM calls and governed actions such as payments through a risk-scored, audited control plane.

What you can do
  • Route LLM inference through the IdentArk control plane, with cost tracking per call and per session
  • Request governed actions such as payment links, payments and refunds, with grants, budgets and human approval before execution
  • Keep provider credentials (Stripe, Paystack, GitHub, AWS) in IdentArk rather than in the agent
  • Persist conversation history in the control plane so sessions survive restarts
  • Poll the status of a capability request, including pending-approval outcomes
When to use it
Use it when an agent must call LLMs or trigger money-moving or privileged actions without holding provider secrets, and you want approvals, budgets and an audit trail in front of those actions.
Requirements
A remote endpoint at api.identark.io over streamable HTTP. Authentication is a required bearer token sent in the Authorization header: an IdentArk API key starting with iak_. No environment variables or local packages are declared.
Before you install
The Authorization header carries an IdentArk API key, so treat it as a secret. Requests can trigger real payments, payment links and refunds, which spend money and depend on human approval and budgets. Actions are executed by a third-party control plane that holds your provider credentials, and calls are audited there.

Installation

In SourceWeft

  1. Open IdentArk Gateway in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.identark%2Fgateway/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "identark-gateway": {
      "type": "http",
      "url": "https://api.identark.io/v1/mcp/rpc",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

[IdentArk]

identark

The AgentGateway Protocol — secure, scalable AI agent execution infrastructure.

[CI] [PyPI] [Python] [License: MIT]


The problem

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:

  1. Security: The agent can access every secret on the machine.
  2. Reliability: A memory-hungry agent degrades your API. Redeploying your API kills all running agents.

identark solves both.


How it works

The SDK implements the AgentGateway Protocol — a clean interface between your agent logic and the outside world. Two implementations ship out of the box:

GatewayWhen to useCredentialsHistory
DirectGatewayLocal development, CI evalsYour API keyIn-memory
ControlPlaneGatewayProduction on IdentArkZero — none in the agentControl plane DB

Your agent code is identical in both environments. The switch is two lines.


Quick start

bash
pip install identark[openai]
python
import asynciofrom openai import AsyncOpenAIfrom 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())

Moving to production

Change two lines. Your agent logic is untouched.

python
# Before (local)from identark import DirectGatewaygateway = DirectGateway(llm_client=AsyncOpenAI(), model="gpt-4o")
# After (production — agent holds zero secrets)from identark import ControlPlaneGatewaygateway = ControlPlaneGateway()  # auto-detects env vars inside a IdentArk sandbox

Governed actions (payments, payment links, refunds)

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.

python
request = await gateway.request_capability(    "payments.payment_link.create",    "paystack",    {"amount_minor": 1_500_000, "currency": "NGN",     "customer_email": "[email protected]", "reference": "order-1001"},    idempotency_key="order-1001-link",)# "succeeded" returns the checkout link; "pending_approval" waits for a person.execution = await gateway.get_capability_execution(request["request_id"])

Installation

bash
# Core SDK onlypip install identark
# With OpenAI supportpip install identark[openai]
# With Anthropic supportpip install identark[anthropic]
# With Google Gemini supportpip install identark[gemini]
# With Mistral AI support (EU provider)pip install identark[mistral]
# All cloud providerspip 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.


Data Sovereignty

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.

Run fully local with Ollama (zero data egress)

python
from openai import AsyncOpenAIfrom 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

Use Mistral AI (EU data residency)

python
from openai import AsyncOpenAIfrom 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.


The AgentGateway Protocol

Any class implementing these four async methods is a valid gateway:

python
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.


Features

  • Zero-secret agents — ControlPlaneGateway holds no API keys, database credentials, or cloud tokens
  • Stateless by design — conversation history owned by the gateway, not the agent; kill and restart without data loss
  • Framework-agnostic — works with LangChain, LlamaIndex, raw API calls, or any custom agent framework
  • Built-in cost tracking — every invoke_llm call returns cost_usd; get_session_cost() returns the running total
  • OpenAI + Anthropic — both providers supported in DirectGateway out of the box
  • MockGateway for testing — no LLM calls in your test suite; full call recording for assertions
  • Full type annotations — py.typed marker; works with mypy strict mode

Testing your agents

python
from identark.testing import MockGatewayfrom 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

Supported providers

ProviderData residencyDirectGatewayGeminiGatewayControlPlaneGateway
OpenAI (gpt-4o, gpt-4o-mini, …)US✓—✓
Anthropic (Claude models)US✓—✓
Google GeminiVaries✓*✓Roadmap
Mistral AIVaries✓—✓
Kimi / MoonshotVaries✓*—✓
Azure OpenAIConfigured Azure region✓*—✓
AWS BedrockConfigured AWS region——✓
OpenRouterProvider-dependent✓*—✓
OllamaLocal 🏠✓—Not a hosted route
Any OpenAI-compatible endpointVaries✓—✓ (custom endpoint)

*Via an OpenAI-compatible client/base URL. Use GeminiGateway for native Gemini SDK features.


Error handling

python
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:    # Catch-all for any SDK error    raise

Full exception hierarchy: IdentArkError > GatewayError > ControlPlaneError > AuthenticationError | CostCapExceededError | SessionNotFoundError


Architecture

┌─────────────────────────────────────┐│            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)   │                └──────────────────┘

Community


Contributing

Contributions are welcome. Please open an issue before submitting significant changes.

bash
git clone https://github.com/identark/identark.gitcd identarkpip install -e ".[dev]"pre-commit installpytest tests/unit/

See CONTRIBUTING.md for full guidelines.


Roadmap

  • LangChain adapter (IdentArkChatModel)
  • LlamaIndex adapter (IdentArkLLM)
  • Streaming support (invoke_llm_stream)
  • CrewAI integration
  • LangGraph integration (IdentArkNode, IdentArkStreamNode)
  • Pluggable inference backends (distributed compute)
  • identark-cli for one-command control plane deployment

License

The 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.

Source: README.md at commit c974f1a

Tools

0
SourceWeft has not read this server's tools yet.

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts