ACI.dev website screenshot

ACI.dev

ACI.dev (Aipolabs Agent-Computer Interface) is an open-source tool-calling platform that hooks AI agents into 600+ pre-built tools through direct function calling or a unified Model Context Protocol server. Maintained by Aipotheosis Labs (Aipolabs) under Apache 2.0, ACI provides multi-tenant OAuth2 and API-key authentication, per-project App Configurations, natural-language permission guardrails, OpenAI- and Anthropic-compatible function definitions, Python and TypeScript SDKs, and the unified aci-mcp server with ACI_SEARCH_FUNCTIONS and ACI_EXECUTE_FUNCTION meta-tools. The sister project Gate22 adds an open-source MCP gateway and control plane for governing which tools agents can use, what they can do, and how it is audited.

4 APIs 13 Features
Agent InfrastructureAgentsAIArtificial IntelligenceFunction CallingMCPModel Context ProtocolOAuthOpen SourceTool CallingVibeOps

APIs

ACI.dev Apps API

Search and inspect the 600+ pre-built Apps in the ACI.dev catalog. Apps are external service integrations (Slack, Gmail, Zendesk, GitHub, etc.) that expose Functions for AI agen...

ACI.dev Functions API

Search, inspect, and execute the callable Functions (tools) exposed by configured Apps. Function definitions are returned in OpenAI- and Anthropic-compatible JSON Schema, and th...

ACI.dev App Configurations API

Create and manage per-project App Configurations. An App Configuration declares which App is enabled, which security scheme it should use (OAuth2, API key, or no-auth), which fu...

ACI.dev Linked Accounts API

Manage end-user Linked Accounts for configured Apps. Initiate an OAuth2 link flow, handle the OAuth2 callback, list and retrieve linked accounts by owner ID, and revoke a Linked...

Collections

Features

600+ pre-built App integrations (Slack, Gmail, Zendesk, GitHub, Notion, Stripe, and more)
Unified MCP server (aci-mcp) exposing ACI_SEARCH_FUNCTIONS and ACI_EXECUTE_FUNCTION meta-tools
Apps MCP mode that surfaces a specific set of Apps as named MCP tools
Node port (aci-mcp-node) for TypeScript-native MCP integration
OpenAI-compatible and Anthropic-compatible function-definition output formats
Multi-tenant end-user OAuth2 link flow, white-label OAuth2 for production branding
Per-project App Configurations with function-level enable/disable and security-scheme overrides
Natural-language permission filters that guardrail tool executions
Custom functions SDK for registering proprietary tools alongside the catalog
Agent Playground for prompting against the unified catalog before wiring it into production
Python and TypeScript SDKs (aci-python-sdk, aci-typescript-sdk)
Sister project gate22 — open-source MCP gateway and control plane for governance and audit across Cursor and other agentic IDEs
Self-hostable backend, frontend portal, and SDKs under Apache 2.0

Integrations

Anthropic Claude (function definitions returned in Anthropic tool-use format)
OpenAI (function definitions returned in OpenAI tool-use format)
Model Context Protocol (Cursor, Claude Desktop, Claude Code, and other MCP clients)
GitHub, Gmail, Slack, Zendesk, Notion, Stripe and 600+ other apps via the ACI catalog

Semantic Vocabularies

Aci Dev Context

0 classes · 5 properties

JSON-LD

API Governance Rules

ACI.dev API Rules

7 rules · 3 errors 4 warnings

SPECTRAL

Example Payloads

Resources

🌐
Portal
Portal
🔗
Documentation
Documentation
🚀
GettingStarted
GettingStarted
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
Documentation
Documentation
👥
GitHubOrganization
GitHubOrganization
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
📦
SDKs
SDKs
📦
SDKs
SDKs
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
💻
SourceCode
SourceCode
🔗
Documentation
Documentation
🔗
Documentation
Documentation
🔗
LinkedIn
LinkedIn
🔗
Twitter
Twitter
🔗
Documentation
Documentation
🔗
License
License
🔗
Vocabulary
Vocabulary
🔗
SpectralRules
SpectralRules
🔗
JSONLD
JSONLD

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: ACI.dev API
  version: 0.0.1-beta.3
items:
- info:
    name: apps
    type: folder
  items:
  - info:
      name: Search Apps
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/apps/search
      params:
      - name: intent
        value: ''
        type: query
        description: Natural language intent for vector similarity sorting. Results will be sorted by relevance to the intent.
      - name: configured_only
        value: ''
        type: query
        description: If true, only return apps that have been configured.
      - name: categories
        value: ''
        type: query
        description: List of categories for filtering.
      - name: limit
        value: ''
        type: query
        description: Maximum number of Apps per response.
      - name: offset
        value: ''
        type: query
        description: Pagination offset.
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Search for Apps.

      Intented to be used by agents to search for apps based on natural language intent.'
  - info:
      name: Get App Details
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/apps/:app_name
      params:
      - name: app_name
        value: ''
        type: path
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Returns an application (name, description, and functions).
- info:
    name: functions
    type: folder
  items:
  - info:
      name: Search Functions
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/functions/search
      params:
      - name: app_names
        value: ''
        type: query
        description: List of app names for filtering functions.
      - name: intent
        value: ''
        type: query
        description: Natural language intent for vector similarity sorting. Results will be sorted by relevance to the intent.
      - name: configured_only
        value: ''
        type: query
        description: If true, only returns functions of apps that are configured.
      - name: limit
        value: ''
        type: query
        description: Maximum number of Apps per response.
      - name: offset
        value: ''
        type: query
        description: Pagination offset.
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Returns the basic information of a list of functions.
  - info:
      name: Get Function Definition
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/functions/:function_name/definition
      params:
      - name: function_name
        value: ''
        type: path
      - name: inference_provider
        value: ''
        type: query
        description: The inference provider, which determines the format of the function definition.
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Return the function definition that can be used directly by LLM.

      The actual content depends on the intended model (inference provider, e.g., OpenAI, Anthropic, etc.) and the function
      itself.'
  - info:
      name: Execute
      type: http
    http:
      method: POST
      url: https://api.aci.dev/v1/functions/:function_name/execute
      params:
      - name: function_name
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Execute
- info:
    name: app-configurations
    type: folder
  items:
  - info:
      name: List App Configurations
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/app-configurations
      params:
      - name: app_names
        value: ''
        type: query
        description: Filter by app names.
      - name: limit
        value: ''
        type: query
        description: Maximum number of results per response.
      - name: offset
        value: ''
        type: query
        description: Pagination offset.
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: List all app configurations for a project, with optionally filters
  - info:
      name: Create App Configuration
      type: http
    http:
      method: POST
      url: https://api.aci.dev/v1/app-configurations
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Create an app configuration for a project
  - info:
      name: Get App Configuration
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/app-configurations/:app_name
      params:
      - name: app_name
        value: ''
        type: path
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Get an app configuration by app name
  - info:
      name: Update App Configuration
      type: http
    http:
      method: PATCH
      url: https://api.aci.dev/v1/app-configurations/:app_name
      params:
      - name: app_name
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Update an app configuration by app name.

      If a field is not included in the request body, it will not be changed.'
  - info:
      name: Delete App Configuration
      type: http
    http:
      method: DELETE
      url: https://api.aci.dev/v1/app-configurations/:app_name
      params:
      - name: app_name
        value: ''
        type: path
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Delete an app configuration by app name

      Warning: This will delete the app configuration from the project,

      associated linked accounts, and then the app configuration record itself.'
- info:
    name: linked-accounts
    type: folder
  items:
  - info:
      name: Link Oauth2 Account
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/linked-accounts/oauth2
      params:
      - name: app_name
        value: ''
        type: query
      - name: linked_account_owner_id
        value: ''
        type: query
      - name: after_oauth2_link_redirect_url
        value: ''
        type: query
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Start an OAuth2 account linking process.

      It will return a redirect url (as a string, instead of RedirectResponse) to the OAuth2 provider''s authorization endpoint.'
  - info:
      name: Linked Accounts Oauth2 Callback
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/linked-accounts/oauth2/callback
    docs: 'Callback endpoint for OAuth2 account linking.

      - A linked account (with necessary credentials from the OAuth2 provider) will be created in the database.'
  - info:
      name: List Linked Accounts
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/linked-accounts
      params:
      - name: app_name
        value: ''
        type: query
      - name: linked_account_owner_id
        value: ''
        type: query
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'List all linked accounts.

      - Optionally filter by app_name and linked_account_owner_id.

      - app_name + linked_account_owner_id can uniquely identify a linked account.

      - This can be an alternatively way to GET /linked-accounts/{linked_account_id} for getting a specific linked account.'
  - info:
      name: Get Linked Account
      type: http
    http:
      method: GET
      url: https://api.aci.dev/v1/linked-accounts/:linked_account_id
      params:
      - name: linked_account_id
        value: ''
        type: path
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: 'Get a linked account by its id.

      - linked_account_id uniquely identifies a linked account across the platform.'
  - info:
      name: Delete Linked Account
      type: http
    http:
      method: DELETE
      url: https://api.aci.dev/v1/linked-accounts/:linked_account_id
      params:
      - name: linked_account_id
        value: ''
        type: path
      auth:
        type: apikey
        key: X-API-KEY
        value: '{{X-API-KEY}}'
        placement: header
    docs: Delete a linked account by its id.
bundled: true