Open Source · MIT License

Typed interoperability for
AI agent tools

AI capabilities are in the pre-TypeScript era. Effector adds a typed interface layer — 40 standard capability types, static composition checking, and cross-runtime compilation from a single sidecar manifest.

Get Started → Try the Playground
$ npm init @effectorhq/effector-code
GitHub
0
Capability Types
0
Compile Targets
0
Tests Passing
0
Dependencies

Every AI tool has a type system. It's just invisible.

Your tool takes something, produces something, and needs credentials from the environment. Today these interfaces are implicit. Effector makes them explicit.

Without types
Chain two tools, pray they work
Search tools by keyword
Read the README to understand a tool
Manually test every combination
Rewrite per runtime
No permission model
With effector
Type-check composition before execution
Discover capabilities by interface type
Machine-readable interface contracts
Automated compatibility verification
One manifest, every runtime
Declared + audited security

One file. Four capabilities.

Drop an effector.toml next to your tool. Your implementation stays untouched — the manifest is pure metadata.

01

Declare your interface

Pick from 40 standard types to describe what your tool accepts, produces, and requires. Declare permissions explicitly. One file, no code changes.

effector.toml
[effector]
name = "code-review"
version = "1.0.0"

[effector.interface]
input = "CodeDiff"
output = "ReviewReport"
context = ["Repository"]

[effector.permissions]
network = false
filesystem = ["read"]
02

Validate statically

Catch type errors, missing permissions, and structural issues at build time. The validator checks your manifest against the 40-type catalog and JSON schema.

terminal
$ npx @effectorhq/core validate .
  ✓ effector.toml parsed
  ✓ Schema valid
  ✓ Types: CodeDiff → ReviewReport

$ npx @effectorhq/audit check .
  ✓ Permissions match source
  ✓ No undeclared access
03

Compile to any runtime

One manifest, every target. The compiler reads your effector.toml and emits MCP schemas, OpenAI function definitions, LangChain configs, or JSON IR.

compile.js
import { compile } from '@effectorhq/core/compile';

// Same manifest, different targets
const mcp  = compile(def, 'mcp');
const oai  = compile(def, 'openai-agents');
const lang = compile(def, 'langchain');
const ir   = compile(def, 'json');
04

Compose with confidence

Chain tools into pipelines with type-level guarantees. The composition checker proves output types match input types — incompatible wiring is caught before any API call.

pipeline
// Static type checking for tool pipelines

git-fetch         CodeSnippet
    
code-review      ReviewReport    
    
slack-notify     SlackMessage    

// Score: 1.0 β€” all types compatible

Verified against established benchmarks.

Two-tier evaluation grounded in BFCL, τ-bench, ToolSword, MCPToolBench++, and API-Bank. Not custom metrics — dimensions that published research has shown correlate with tool-use accuracy.

Type Resolution
87.7%
Manifest Validation
89.7%
Composition Safety
100%
Security Detection
81.4%
Compilation
100%
0
Toolchain Score / 100
179
Test Cases
18
Known Gaps
3.2ms
Runtime
0
Dependencies
$ node benchmark.js --verbose
Known Limitations (why not 100%)
Type Checker Wildcard matching uses naive prefix — BarCode matches Code* incorrectly
Validator Does not reject unknown top-level fields or check interface types against catalog
Security Regex-based — misses leetspeak evasion, WebSocket exfiltration, produces false positives on code comments
Baseline MCP effector MCP Δ
Comparable Both formats can express these
D1
Function Selection Signal
BFCL · Berkeley Function Calling Leaderboard
10
38
+28
D2
Parameter Extraction Signal
BFCL + API-Bank · Li et al., ACL 2023
37
23
−14
D5
Schema Completeness
MCPToolBench++ · Nexus (Srinivasan et al., 2023)
29
66
+37
Differential Capabilities effector adds to MCP
D3
Multi-Step Composition Safety
τ-bench (Yao et al., 2024) + MCP-Bench
13
88
+75
D4
Safety & Permission Coverage
ToolSword (Ye et al., 2024) + SafeToolBench (Guo et al., 2024)
0
53
+53
+18
Comparable Δ
+64
Differential Δ
+36
Combined Δ
8/8
Composition Chains
D2 Regression: compile() generates inputSchema.properties only for envRead variables. 6/10 tools show parameter constraint regression. This is a real compiler limitation, not a measurement artifact.
Composition Chain Verification
code-review slack-notify exact-match
security-scan slack-notify subtype
file-search deploy-service incompatible
db-query summarize-doc incompatible
Baseline tools cannot participate — MCP has no typed interface model
Grounded in BFCL, MCPToolBench++, MCP-AgentBench, τ-bench (Yao et al., 2024), ToolSword (Ye et al., 2024), SafeToolBench (Guo et al., 2024), API-Bank (Li et al., ACL 2023).
Deterministic · No API keys · Reproducible: node benchmark.js --verbose

Zero friction. Zero dependencies.

01

Sidecar manifest

Your tool's implementation stays untouched. effector.toml sits next to your code like .d.ts sits next to .js.

02

5 minutes to start

npx create-effector scaffolds everything. One command to validate, one to compile. No configuration.

03

Zero dependencies

The entire toolchain uses only Node.js built-ins. No node_modules tree. Installs in under a second.

04

Build-time only

No runtime overhead. Effector runs at build and CI time. Zero code in the request path.

Start with one file.
Ship to every runtime.

One command to scaffold. One manifest to declare your interface. One compiler for every target.

$ npm init @effectorhq/effector-code