Skip to main content
A capability is any tool or service your gateway or agent can invoke. Noorle supports three types, each with different tradeoffs.

Capability Types

1. Built-in Capabilities

Pre-built, platform-provided tools ready to use immediately.
CapabilityDescriptionAgent?MCP?
FilesRead/write files in workspace (S3-backed)
Web SearchSearch internet via Bing Search API
HTTP ClientMake HTTP requests to any API
Code RunnerExecute Python, Node, Rust code
Knowledge RetrievalSemantic search in knowledge bases
SandboxIsolated Linux environment
BrowserAutomated web interaction
ComputerDirect system access (dangerous)
AgentOnly means the capability is only exposed to agents, never to MCP gateways (for security). When to use:
  • Quick prototyping
  • Standard operations (search, coding, file access)
  • Multi-agent workflows
Advantages:
  • Zero setup required
  • Always available
  • High performance (optimized)
  • Free tier included

2. Plugins

Custom tools you build and deploy as WebAssembly modules. What is a plugin?
  • Compiled WebAssembly binary (.npack file)
  • Runs in Wasmtime WASM sandbox
  • Exposes 1+ MCP tools
  • Versioned and rollback-able
Example plugin: Loan approval engine
// Your Rust code
pub fn approve_loan(income: f64, credit_score: i32) -> bool {
    income > 50000 && credit_score > 650
}
Compile to WASM, upload .npack file, deploy instantly. When to use:
  • Proprietary business logic
  • Performance-critical code
  • Secure computation (PII, secrets)
  • Complex algorithms
Advantages:
  • Total control over logic
  • Fast execution (WASM near-native speed)
  • Secure sandbox isolation
  • Version management
Trade-offs:
  • Requires development effort
  • Need to maintain code
  • Size limit (plugins ~50MB)

3. Connectors

Links to external services (REST APIs, MCP servers, custom MCP).

REST API Connector

Import OpenAPI specs, Noorle learns how to call the API.
{
  "type": "rest",
  "name": "Shopify Store",
  "base_url": "https://store.myshopify.com/api/v2",
  "operations": [
    {
      "name": "list_orders",
      "method": "GET",
      "path": "/orders.json",
      "description": "Get all orders"
    },
    {
      "name": "create_order",
      "method": "POST",
      "path": "/orders.json",
      "description": "Create new order"
    }
  ],
  "auth": {
    "type": "bearer",
    "token": "encrypted-token"
  }
}

MCP Registry Connector

Use pre-built MCP servers from the community registry.
{
  "type": "mcp_registry",
  "registry_name": "io.github.user/airtable-mcp-server",
  "version": "1.7.3",
  "auth": {
    "type": "bearer",
    "token": "encrypted-token"
  }
}
Available servers: Airtable, GitHub, HubSpot, Slack, and more.

Custom MCP Connector

Connect to your own MCP server.
{
  "type": "custom",
  "transport": {
    "type": "http",
    "url": "https://my-server.example.com/mcp"
  },
  "auth": {
    "type": "bearer",
    "token": "encrypted-token"
  }
}
When to use:
  • Integrate existing APIs (Stripe, Shopify, etc.)
  • Leverage community MCP servers
  • Connect to internal services
  • No development needed
Advantages:
  • Zero code required
  • Integrate anything with an API
  • Instant deployment
Trade-offs:
  • Dependent on external service
  • Network latency
  • No offline execution

Exposure Scopes

Built-in capabilities have exposure scopes that determine where they’re available:

AgentAndMcp (Default)

Available to both agents and MCP gateways.

AgentOnly

Only available to agents. Hidden from MCP gateways. Why AgentOnly?
  • Computer capability allows direct system access
  • Safe for your own agents that you control
  • Dangerous to expose to external MCP clients
  • Prevents accidental remote execution

Attaching Capabilities

To use a capability, attach it to a gateway or agent: Via Console:
  1. Open Gateway/Agent settings
  2. Click “Add Capability”
  3. Select type (Built-in, Plugin, Connector)
  4. Configure options (rate limits, auth, etc.)
  5. Save
Via API:
POST /api/gateways/{gateway_id}/capabilities
{
  "capability_id": "uuid-123",
  "metadata": {
    "enabled": true,
    "rate_limit": 100,
    "timeout_ms": 30000
  }
}

Capability Discovery

When a client connects to a gateway, it automatically discovers attached capabilities:
const tools = await gateway.listTools();

// Returns all available capabilities as MCP tools
[
  {
    name: "files_read",
    description: "Read a file from workspace"
  },
  {
    name: "web_search",
    description: "Search the web"
  },
  {
    name: "my_loan_analyzer",
    description: "Analyze loan applications"
  },
  {
    name: "shopify_list_orders",
    description: "List all orders from Shopify"
  }
]

Capability Execution Flow

How a capability is executed:

Security & Sandboxing

Built-in Capabilities

  • Noorle-controlled execution
  • Full access to account resources
  • No external exposure risk

Plugins

  • Wasmtime WASM sandbox (WASI Preview 2)
  • Cannot access filesystem directly
  • Cannot make network calls (unless granted)
  • Cannot access secrets (unless injected via env)
  • Controlled resource usage (memory, CPU time)

Connectors

  • API keys/tokens encrypted at rest
  • Transmitted over HTTPS only
  • Gateway-scoped (each gateway has own credentials)
  • Audit trail of all calls
  • Rate limiting per connector

Capability Metadata

When you attach a capability, you can customize its behavior:
{
  "capability_id": "web-search-id",
  "metadata": {
    "enabled": true,
    "display_name": "Internet Search",
    "rate_limit_per_hour": 100,
    "max_execution_time_ms": 30000,
    "cost_limit_usd": null,
    "require_confirmation": false
  }
}
Common settings:
  • enabled: Turn on/off without removing
  • display_name: Custom name for agents
  • rate_limit: Requests per hour
  • max_execution_time: Timeout in milliseconds
  • cost_limit_usd: Max cost per execution (configurable, see Pricing)
  • require_confirmation: Ask user before executing

Best Practices

Use Built-in First

Start with builtin capabilities. They’re optimized, included, and sufficient for 80% of use cases.

Plugin for Unique Logic

Only build a plugin if you need custom business logic that can’t be done with existing tools.

Connector for APIs

Integrate external services via Connector. Use REST import if possible to skip coding.

Version Plugins

Always version plugins. Test new versions before rolling out. Keep old versions available.

Next: Learn about Agents that use capabilities.