├── backend ├── aci │ ├── __init__.py │ ├── cli │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── commands │ │ │ ├── subscription │ │ │ │ ├── __init__.py │ │ │ │ └── data │ │ │ │ │ └── gate22_plans.json │ │ │ ├── virtual_mcp │ │ │ │ └── __init__.py │ │ │ ├── adhoc │ │ │ │ └── __init__.py │ │ │ ├── mcp │ │ │ │ └── __init__.py │ │ │ └── mock_data │ │ │ │ └── __init__.py │ │ ├── config.py │ │ └── README.md │ ├── mcp │ │ ├── __init__.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── middleware │ │ │ └── __init__.py │ │ ├── protocol │ │ │ └── __init__.py │ │ ├── routes │ │ │ ├── __init__.py │ │ │ ├── handlers │ │ │ │ ├── tools │ │ │ │ │ └── __init__.py │ │ │ │ ├── __init__.py │ │ │ │ └── tools_list.py │ │ │ └── health.py │ │ ├── context.py │ │ ├── logging.py │ │ └── dependencies.py │ ├── common │ │ ├── __init__.py │ │ ├── schemas │ │ │ ├── __init__.py │ │ │ ├── user.py │ │ │ ├── mcp_server_bundle.py │ │ │ └── pagination.py │ │ ├── db │ │ │ ├── __init__.py │ │ │ └── crud │ │ │ │ ├── virtual_mcp │ │ │ │ └── __init__.py │ │ │ │ └── __init__.py │ │ ├── sentry.py │ │ ├── openai_client.py │ │ ├── url_utils.py │ │ └── test_utils.py │ ├── control_plane │ │ ├── __init__.py │ │ ├── middleware │ │ │ └── __init__.py │ │ ├── routes │ │ │ ├── __init__.py │ │ │ ├── organization │ │ │ │ └── __init__.py │ │ │ ├── health.py │ │ │ └── mcp_tools.py │ │ ├── context.py │ │ ├── services │ │ │ ├── __init__.py │ │ │ ├── mcp_tools │ │ │ │ └── __init__.py │ │ │ ├── oauth2_client │ │ │ │ └── __init__.py │ │ │ └── subscription │ │ │ │ └── stripe_client.py │ │ └── tests │ │ │ └── dummy_mcp_servers │ │ │ ├── gmail │ │ │ ├── server.json │ │ │ └── tools.json │ │ │ ├── notion │ │ │ └── server.json │ │ │ └── github │ │ │ ├── tools.json │ │ │ └── server.json │ ├── virtual_mcp │ │ ├── __init__.py │ │ ├── routes │ │ │ ├── __init__.py │ │ │ ├── handlers │ │ │ │ └── __init__.py │ │ │ └── health.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── middleware │ │ │ └── __init__.py │ │ ├── executors │ │ │ ├── connectors │ │ │ │ ├── __init__.py │ │ │ │ ├── vercel.py │ │ │ │ └── e2b.py │ │ │ └── __init__.py │ │ ├── context.py │ │ ├── dependencies.py │ │ └── config.py │ └── alembic │ │ ├── README │ │ ├── script.py.mako │ │ └── versions │ │ ├── 2025_08_25_1003-94b423b00cf5_pgvector_setup.py │ │ ├── 2025_08_31_1957-7ace8fa6021e_add_transport_type_to_mcpserver.py │ │ ├── 2025_09_01_2212-63224673a97a_add_name_and_description_to_.py │ │ └── 2025_08_26_1309-6e960597029b_rename_field_mcp_server_configuration_.py ├── .python-version ├── .prettierrc ├── virtual_mcp_servers │ ├── dify │ │ └── server.json │ ├── lmnt │ │ └── server.json │ ├── aidbase │ │ └── server.json │ ├── browserbase │ │ └── server.json │ ├── e2b │ │ ├── server.json │ │ └── tools.json │ ├── google_tasks │ │ └── server.json │ ├── holded │ │ └── server.json │ ├── dexscreener │ │ └── server.json │ ├── supabase │ │ └── server.json │ ├── steel │ │ └── server.json │ ├── notte │ │ └── server.json │ ├── accredible │ │ └── server.json │ ├── aero_workflow │ │ └── server.json │ ├── cloudflare │ │ └── server.json │ ├── baserow │ │ └── server.json │ ├── clickup │ │ └── server.json │ ├── netlify │ │ └── server.json │ ├── gmail │ │ └── server.json │ ├── api_template │ │ └── server.json │ ├── daytona │ │ └── server.json │ ├── figma │ │ └── server.json │ ├── reddit │ │ └── server.json │ ├── vercel │ │ └── server.json │ ├── serpapi │ │ └── server.json │ ├── apaleo │ │ └── server.json │ ├── agent_mail │ │ └── server.json │ ├── all_images │ │ └── server.json │ ├── feishu │ │ └── server.json │ ├── factorialhr │ │ └── server.json │ ├── breezy │ │ └── server.json │ ├── youtube │ │ └── server.json │ ├── calendly │ │ └── server.json │ ├── coinmarketcap │ │ └── server.json │ ├── baidu_map │ │ └── server.json │ ├── rocketreach │ │ └── server.json │ ├── scrapybara │ │ └── server.json │ ├── x │ │ └── server.json │ ├── brave_search │ │ └── server.json │ ├── resend │ │ └── server.json │ ├── akkio │ │ └── server.json │ ├── google_analytics_admin │ │ └── server.json │ ├── google_calendar │ │ └── server.json │ ├── google_sheets │ │ └── server.json │ ├── share_point │ │ └── server.json │ ├── sendgrid │ │ └── server.json │ ├── typefully │ │ └── server.json │ ├── microsoft_onedrive │ │ └── server.json │ ├── microsoft_calendar │ │ └── server.json │ ├── microsoft_teams │ │ └── server.json │ ├── active_campaign │ │ └── server.json │ ├── coda │ │ └── server.json │ ├── google_docs │ │ └── server.json │ ├── hackernews │ │ └── server.json │ ├── microsoft_outlook │ │ └── server.json │ ├── airtable │ │ └── server.json │ ├── eleven_labs │ │ └── server.json │ ├── zenrows │ │ └── server.json │ ├── google_meet │ │ └── server.json │ ├── cognito_forms │ │ └── server.json │ ├── one_signal │ │ └── server.json │ ├── ultra_msg │ │ └── server.json │ ├── arxiv │ │ └── server.json │ ├── cal │ │ └── server.json │ ├── google_maps │ │ └── server.json │ ├── slack │ │ └── server.json │ ├── discord │ │ ├── server.json │ │ └── tools.json │ └── open_weather_map │ │ └── server.json ├── .dockerignore ├── Dockerfile.runner ├── compose.ci.yml ├── Dockerfile.migration ├── mcp_servers │ ├── lmnt │ │ └── server.json │ ├── dexscreener │ │ └── server.json │ ├── coingecko │ │ └── server.json │ ├── dify │ │ └── server.json │ ├── browserbase │ │ └── server.json │ ├── discord │ │ ├── tools.json │ │ └── server.json │ ├── context7 │ │ └── server.json │ ├── aidbase │ │ └── server.json │ ├── render │ │ └── server.json │ ├── holded │ │ └── server.json │ ├── anchor_browser │ │ └── server.json │ ├── steel │ │ └── server.json │ ├── aero_workflow │ │ └── server.json │ ├── notte │ │ └── server.json │ ├── serpapi │ │ └── server.json │ ├── api_template │ │ └── server.json │ ├── supabase │ │ └── server.json │ ├── all_images │ │ └── server.json │ ├── breezy │ │ └── server.json │ ├── cloudflare │ │ └── server.json │ ├── hackernews │ │ └── server.json │ ├── posthog │ │ └── server.json │ ├── stripe │ │ └── server.json │ ├── accredible │ │ └── server.json │ ├── baidu_map │ │ └── server.json │ ├── factorialhr │ │ └── server.json │ ├── baserow │ │ └── server.json │ ├── daytona │ │ └── server.json │ ├── apaleo │ │ └── server.json │ ├── vercel │ │ └── server.json │ ├── scrapybara │ │ └── server.json │ ├── akkio │ │ └── server.json │ ├── coinmarketcap │ │ └── server.json │ ├── feishu │ │ └── server.json │ ├── netlify │ │ └── server.json │ ├── rocketreach │ │ └── server.json │ ├── brave_search │ │ └── server.json │ ├── etherscan │ │ └── server.json │ ├── resend │ │ └── server.json │ ├── agent_mail │ │ └── server.json │ ├── sendgrid │ │ └── server.json │ ├── arxiv │ │ └── server.json │ ├── linkup │ │ ├── server.json │ │ └── tools.json │ ├── typefully │ │ └── server.json │ ├── eleven_labs │ │ └── server.json │ ├── zenrows │ │ └── server.json │ ├── active_campaign │ │ └── server.json │ ├── coda │ │ └── server.json │ ├── ultra_msg │ │ └── server.json │ ├── airtable │ │ └── server.json │ ├── linear │ │ └── server.json │ ├── one_signal │ │ └── server.json │ ├── cognito_forms │ │ └── server.json │ ├── cal │ │ └── server.json │ ├── google_maps │ │ └── server.json │ ├── gitlab │ │ └── server.json │ ├── fireflies │ │ └── server.json │ ├── sentry │ │ └── server.json │ ├── notion │ │ └── server.json │ ├── open_weather_map │ │ └── server.json │ ├── clickup │ │ └── server.json │ ├── google_tasks │ │ └── server.json │ ├── neon │ │ └── server.json │ ├── gmail │ │ └── server.json │ ├── calendly │ │ └── server.json │ ├── google_sheets │ │ └── server.json │ ├── reddit │ │ └── server.json │ ├── github │ │ └── server.json │ ├── google_docs │ │ └── server.json │ ├── atlassian │ │ └── server.json │ ├── google_analytics_admin │ │ └── server.json │ ├── microsoft_onedrive │ │ └── server.json │ ├── microsoft_outlook │ │ └── server.json │ ├── microsoft_calendar │ │ └── server.json │ ├── exa │ │ └── server.json │ ├── share_point │ │ └── server.json │ ├── google_calendar │ │ └── server.json │ ├── x │ │ └── server.json │ ├── google_meet │ │ └── server.json │ ├── youtube │ │ └── server.json │ └── figma │ │ └── server.json ├── .importlinter ├── Dockerfile.mcp ├── Dockerfile.virtual_mcp └── Dockerfile.control_plane ├── frontend ├── vitest.setup.ts ├── .prettierignore ├── public │ ├── favicon-dark.ico │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-light.ico │ ├── gate22-banner.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ └── site.webmanifest ├── src │ ├── components │ │ ├── layout │ │ │ ├── footer.tsx │ │ │ └── token-refresh-overlay.tsx │ │ ├── ui │ │ │ ├── skeleton.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── label.tsx │ │ │ ├── sonner.tsx │ │ │ ├── textarea.tsx │ │ │ ├── separator.tsx │ │ │ ├── input.tsx │ │ │ ├── progress.tsx │ │ │ ├── switch.tsx │ │ │ ├── formatted-text.tsx │ │ │ ├── avatar.tsx │ │ │ └── checkbox.tsx │ │ ├── theme-provider.tsx │ │ ├── data-table │ │ │ └── data-table-advanced-toolbar.tsx │ │ ├── ui-extensions │ │ │ └── enhanced-data-table │ │ │ │ └── row-selection-column.tsx │ │ └── theme-toggle.tsx │ ├── config │ │ └── api.constants.ts │ ├── features │ │ ├── mcp │ │ │ └── hooks │ │ │ │ └── use-mcp-server-configurations.ts │ │ ├── teams │ │ │ ├── components │ │ │ │ └── team-member-invitation-dialog.tsx │ │ │ ├── types │ │ │ │ └── team.types.ts │ │ │ └── hooks │ │ │ │ └── use-teams.ts │ │ ├── connected-accounts │ │ │ └── types │ │ │ │ ├── mcp-server-configuration.types.ts │ │ │ │ └── connectedaccount.types.ts │ │ ├── settings │ │ │ ├── hooks │ │ │ │ ├── use-plans.ts │ │ │ │ ├── use-subscription-status.ts │ │ │ │ └── use-cancel-subscription.ts │ │ │ ├── types │ │ │ │ └── organization.types.ts │ │ │ └── components │ │ │ │ ├── settings-section.tsx │ │ │ │ ├── settings-item.tsx │ │ │ │ └── teams-settings.tsx │ │ ├── invitations │ │ │ └── types │ │ │ │ └── invitation.types.ts │ │ └── logs │ │ │ ├── api │ │ │ └── logs.service.ts │ │ │ └── types │ │ │ └── logs.types.ts │ ├── lib │ │ ├── utils.ts │ │ ├── feature-flags.ts │ │ ├── format.ts │ │ ├── safe-redirect.ts │ │ └── id.ts │ ├── app │ │ ├── (dashboard) │ │ │ ├── teams │ │ │ │ ├── page.tsx │ │ │ │ ├── new │ │ │ │ │ └── page.tsx │ │ │ │ └── [teamId] │ │ │ │ │ └── page.tsx │ │ │ ├── members │ │ │ │ └── page.tsx │ │ │ ├── organization-settings │ │ │ │ └── page.tsx │ │ │ └── subscription │ │ │ │ └── page.tsx │ │ ├── (landing) │ │ │ └── page.tsx │ │ └── global-error.tsx │ ├── instrumentation.ts │ ├── utils │ │ └── time.ts │ ├── hooks │ │ ├── use-mobile.tsx │ │ ├── use-debounced-callback.ts │ │ └── use-callback-ref.ts │ ├── providers │ │ └── query-provider.tsx │ └── types │ │ └── data-table.ts ├── vercel.json ├── .env.example ├── postcss.config.mjs ├── .prettierrc ├── sentryoptions.ts ├── eslint.config.mjs ├── vitest.config.mts ├── components.json ├── tsconfig.json ├── .gitignore ├── sentry.server.config.ts └── sentry.edge.config.ts ├── .gitignore ├── .vscode └── settings.json └── .github ├── PULL_REQUEST_TEMPLATE.md └── workflows ├── frontend-checks.yml └── ecs-build-image.yml /backend/aci/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/cli/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/.python-version: -------------------------------------------------------------------------------- 1 | 3.12 2 | -------------------------------------------------------------------------------- /backend/aci/common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/common/schemas/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/control_plane/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/middleware/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/protocol/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/routes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/routes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/control_plane/middleware/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/control_plane/routes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/middleware/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/mcp/routes/handlers/tools/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/executors/connectors/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/aci/alembic/README: -------------------------------------------------------------------------------- 1 | Generic single-database configuration. 2 | -------------------------------------------------------------------------------- /frontend/vitest.setup.ts: -------------------------------------------------------------------------------- 1 | import "@testing-library/jest-dom/vitest"; 2 | -------------------------------------------------------------------------------- /frontend/.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .next 3 | build 4 | dist 5 | ui/ 6 | -------------------------------------------------------------------------------- /backend/aci/common/db/__init__.py: -------------------------------------------------------------------------------- 1 | from . import crud 2 | 3 | __all__ = ["crud"] 4 | -------------------------------------------------------------------------------- /backend/aci/control_plane/routes/organization/__init__.py: -------------------------------------------------------------------------------- 1 | """Organization-related routes package.""" 2 | -------------------------------------------------------------------------------- /backend/aci/cli/__main__.py: -------------------------------------------------------------------------------- 1 | from aci.cli.aci import cli 2 | 3 | if __name__ == "__main__": 4 | cli() 5 | -------------------------------------------------------------------------------- /backend/aci/common/db/crud/virtual_mcp/__init__.py: -------------------------------------------------------------------------------- 1 | from . import servers, tools 2 | 3 | __all__ = ["servers", "tools"] 4 | -------------------------------------------------------------------------------- /frontend/public/favicon-dark.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/favicon-dark.ico -------------------------------------------------------------------------------- /frontend/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/favicon-16x16.png -------------------------------------------------------------------------------- /frontend/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/favicon-32x32.png -------------------------------------------------------------------------------- /frontend/public/favicon-light.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/favicon-light.ico -------------------------------------------------------------------------------- /frontend/public/gate22-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/gate22-banner.png -------------------------------------------------------------------------------- /frontend/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/apple-touch-icon.png -------------------------------------------------------------------------------- /frontend/src/components/layout/footer.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | export const Footer = () => { 3 | return ; 4 | }; 5 | -------------------------------------------------------------------------------- /frontend/src/config/api.constants.ts: -------------------------------------------------------------------------------- 1 | // Base path for the control plane API 2 | export const CONTROL_PLANE_PATH = "/v1/control-plane"; 3 | -------------------------------------------------------------------------------- /backend/aci/mcp/context.py: -------------------------------------------------------------------------------- 1 | import contextvars 2 | 3 | request_id_ctx_var = contextvars.ContextVar[str]("request_id", default="unknown") 4 | -------------------------------------------------------------------------------- /frontend/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /frontend/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aipotheosis-labs/gate22/HEAD/frontend/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /backend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": false, 4 | "trailingComma": "all", 5 | "printWidth": 100, 6 | "tabWidth": 2 7 | } 8 | -------------------------------------------------------------------------------- /backend/aci/control_plane/context.py: -------------------------------------------------------------------------------- 1 | import contextvars 2 | 3 | request_id_ctx_var = contextvars.ContextVar[str | None]("request_id", default="unknown") 4 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/context.py: -------------------------------------------------------------------------------- 1 | import contextvars 2 | 3 | request_id_ctx_var = contextvars.ContextVar[str | None]("request_id", default="unknown") 4 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/dify/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DIFY", 3 | "description": "Dify API for managing AI-driven tasks and workflows." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/lmnt/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LMNT", 3 | "description": "LMNT is an API for text-to-speech and voice cloning." 4 | } 5 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/subscription/__init__.py: -------------------------------------------------------------------------------- 1 | from .insert_subscription_plan import insert_subscription_plan 2 | 3 | __all__ = ["insert_subscription_plan"] 4 | -------------------------------------------------------------------------------- /backend/aci/mcp/logging.py: -------------------------------------------------------------------------------- 1 | from enum import StrEnum 2 | 3 | 4 | class LogEvent(StrEnum): 5 | SEARCH_TOOLS = "search_tools" 6 | EXECUTE_TOOL = "execute_tool" 7 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/aidbase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AIDBASE", 3 | "description": "Integration with Aidbase API to manage resources and workflows." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/browserbase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BROWSERBASE", 3 | "description": "Browserbase is a platform for running headless browsers." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/features/mcp/hooks/use-mcp-server-configurations.ts: -------------------------------------------------------------------------------- 1 | // Re-export the hook for easier imports 2 | export { useMCPServerConfigurations } from "./use-mcp-servers"; 3 | -------------------------------------------------------------------------------- /frontend/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://openapi.vercel.sh/vercel.json", 3 | "git": { 4 | "deploymentEnabled": { 5 | "main": false 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/e2b/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "E2B", 3 | "description": "E2B is an open-source runtime for executing AI-generated code in secure cloud sandboxes." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_tasks/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_TASKS", 3 | "description": "The Google Tasks API allows managing tasks and task lists programmatically." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/.env.example: -------------------------------------------------------------------------------- 1 | NODE_ENV=development 2 | NEXT_PUBLIC_API_URL=http://localhost:8000 3 | NEXT_PUBLIC_MCP_BASE_URL=http://localhost:8001/gateway 4 | NEXT_PUBLIC_SUBSCRIPTION_ENABLED=false 5 | -------------------------------------------------------------------------------- /backend/aci/control_plane/services/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Service layer for control plane business logic. 3 | """ 4 | 5 | from .email_service import EmailService 6 | 7 | __all__ = ["EmailService"] 8 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/holded/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HOLDED", 3 | "description": "Holded API for managing team, employees, payroll, treasury, invoicing and other business operations." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | "@tailwindcss/postcss": {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/virtual_mcp/__init__.py: -------------------------------------------------------------------------------- 1 | from .upsert_server import upsert as upsert_server 2 | from .upsert_tools import upsert as upsert_tools 3 | 4 | __all__ = ["upsert_server", "upsert_tools"] 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/dexscreener/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DEXSCREENER", 3 | "description": "DexScreener API integration for accessing token and pair information from decentralized exchanges." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/supabase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SUPABASE", 3 | "description": "Supabase is an open-source Firebase alternative providing real-time databases, authentication, and more." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx"; 2 | import { twMerge } from "tailwind-merge"; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/steel/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "STEEL", 3 | "description": "API for browser automation, web scraping, screenshot capture, and PDF generation with session management capabilities." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/notte/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NOTTE", 3 | "description": "Notte transforms the internet into a space where each website becomes a structured, navigable map for intelligent agents." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/accredible/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ACCREDIBLE", 3 | "description": "Accredible integration for managing digital certificates and badges. Create, search, and generate PDFs for credentials." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/aero_workflow/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AERO_WORKFLOW", 3 | "description": "Aero is workflow & practice management built specifically with the modern cloud-based accounting firm in mind." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/cloudflare/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CLOUDFLARE", 3 | "description": "The Cloudflare API allows programmatic control over your Cloudflare account, including DNS, DDoS protection, and more." 4 | } 5 | -------------------------------------------------------------------------------- /backend/.dockerignore: -------------------------------------------------------------------------------- 1 | # custom ignores 2 | **/.env 3 | **/.env.example 4 | **/__pycache__ 5 | **/*.pyc 6 | 7 | # Python 8 | __pycache__ 9 | app.egg-info 10 | *.pyc 11 | .mypy_cache 12 | .coverage 13 | htmlcov 14 | .venv 15 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/baserow/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BASEROW", 3 | "description": "Baserow is an open source no-code database tool and Airtable alternative. Create your own database without technical experience." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/clickup/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CLICKUP", 3 | "description": "The ClickUp API allows you to interact with ClickUp programmatically, including workspace management, tasks, lists, folders, and more." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/netlify/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NETLIFY", 3 | "description": "Netlify is a cloud hosting platform for web applications and static sites with continuous deployment, forms, and serverless functions." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/gmail/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GMAIL", 3 | "description": "The Gmail API is a RESTful API that enables sending, reading, and managing emails. This integration allows sending emails on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/api_template/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "API_TEMPLATE", 3 | "description": "APITemplate.io is a template-based document generation service that allows you to create PDFs and other documents from HTML templates." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/daytona/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DAYTONA", 3 | "description": "Daytona provides secure and elastic infrastructure for running AI-generated code in isolated environments with sub-90ms sandbox creation time." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/figma/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FIGMA", 3 | "description": "Figma is a browser-based collaborative interface design tool. This integration allows access to and processing of Figma design files and resources." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/reddit/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "REDDIT", 3 | "description": "The Reddit API allows you to interact with Reddit programmatically, including post management, comments, user interactions, and subreddit operations." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/vercel/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "VERCEL", 3 | "description": "The Vercel API allows programmatic control over deployments, projects, and integrations, including GitHub repository linking and deployment management." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/serpapi/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SERPAPI", 3 | "description": "SerpApi integration for web search, images, news, academic papers, and trends, providing access to Google Search, Images, News, Scholar, and Trends APIs." 4 | } 5 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/routes/handlers/__init__.py: -------------------------------------------------------------------------------- 1 | from aci.virtual_mcp.routes.handlers.tools_call import handle_tools_call 2 | from aci.virtual_mcp.routes.handlers.tools_list import handle_tools_list 3 | 4 | __all__ = ["handle_tools_call", "handle_tools_list"] 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/apaleo/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "APALEO", 3 | "description": "The open platform for modern hospitality. Hotel and apartment businesses run more efficiently on Apaleo today and use innovative apps to be ready for tomorrow." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": false, 4 | "trailingComma": "all", 5 | "printWidth": 100, 6 | "tabWidth": 2, 7 | "plugins": ["prettier-plugin-tailwindcss"], 8 | "tailwindStylesheet": "./src/app/globals.css" 9 | } 10 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/agent_mail/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AGENT_MAIL", 3 | "description": "Agent Mail is an email service that helps manage and automate email communications with features for inbox management, thread tracking, and message handling." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/all_images/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ALL_IMAGES", 3 | "description": "All-Images.ai API integration for image search and AI image generation. Provides capabilities for searching stock images and generating custom images using AI." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/feishu/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FEISHU", 3 | "description": "Feishu (Lark) is a suite of workplace collaboration tools developed by ByteDance. It provides APIs for messaging, document collaboration, and workplace automation." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/factorialhr/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FACTORIAL_HR", 3 | "description": "Factorial HR API provides comprehensive HR management capabilities including employee management, task tracking, webhooks, job catalog, and finance management." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/breezy/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BREEZY", 3 | "description": "Breezy HR is an applicant tracking system that helps companies streamline their hiring process with features for job posting, candidate management, and interview scheduling." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/youtube/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "YOUTUBE", 3 | "description": "YouTube API provides access to Google's streaming video repository, allowing you to search for videos, retrieve standard feeds, and manage YouTube subscriptions and playlists." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/features/teams/components/team-member-invitation-dialog.tsx: -------------------------------------------------------------------------------- 1 | // This component is deprecated and replaced with AddTeamMemberDialog 2 | // The backend API doesn't support email-based invitations 3 | // Instead, it requires adding existing organization members to teams 4 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/calendly/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CALENDLY", 3 | "description": "Calendly integration for scheduling and managing meetings. This app allows you to automate your scheduling process, embed Calendly on your website, and manage your availability." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/coinmarketcap/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "COINMARKETCAP", 3 | "description": "CoinMarketCap API provides cryptocurrency market data including listings, quotes, mapping and global metrics. API accessible is subject to the pricing tier of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/baidu_map/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BAIDU_MAP", 3 | "description": "Baidu Map API is a set of map-based application interfaces for developers, providing services such as location search, geocoding, route planning, and real-time traffic conditions." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/rocketreach/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ROCKETREACH", 3 | "description": "RocketReach API lets you search and retrieve contact info for 700M+ professionals and 60M+ companies. Access accurate email addresses, phone numbers, and professional details." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/scrapybara/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SCRAPYBARA", 3 | "description": "Scrapybara is a web scraping API designed for developers. It provides a powerful, fast, and simple interface to scrape any webpage and extract structured content in real time." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/x/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "X", 3 | "description": "X API v2 integration for accessing posts, users, communities, trends, and social interactions. Provides programmatic access to X's global conversation with real-time data and advanced analytics." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/brave_search/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BRAVE_SEARCH", 3 | "description": "Brave Search API is a REST API to query Brave Search and get back search results from the web. It supports web search, summarizer search, image search, video search, news search." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/resend/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RESEND", 3 | "description": "Resend is the email API for developers. It provides a modern API for sending transactional emails, managing email templates, and tracking email delivery status with comprehensive analytics." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/akkio/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AKKIO", 3 | "description": "Akkio is a no-code AI platform that enables businesses to build, deploy, and maintain AI solutions for predictive analytics, forecasting, and classification without requiring data science expertise." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_analytics_admin/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_ANALYTICS_ADMIN", 3 | "description": "The Google Analytics Admin API allows for programmatic access to the Google Analytics configuration data and is only compatible with Google Analytics properties." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_calendar/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_CALENDAR", 3 | "description": "The Google Calendar API is a RESTful API that can be accessed through explicit HTTP calls. The API exposes most of the features available in the Google Calendar Web interface." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_sheets/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_SHEETS", 3 | "description": "The Google Sheets API is a RESTful API that allows programmatic access to spreadsheet data and formatting. It supports CRUD operations, formulas, charts, and collaboration features." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/share_point/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SHARE_POINT", 3 | "description": "The Microsoft Graph SharePoint API enables access to SharePoint sites, lists, libraries, and files. This integration allows reading and managing SharePoint content on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/sendgrid/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SENDGRID", 3 | "description": "SendGrid is a cloud-based email service that delivers transactional and marketing emails. It provides a robust API for sending emails, managing email templates, and tracking email delivery status." 4 | } 5 | -------------------------------------------------------------------------------- /backend/Dockerfile.runner: -------------------------------------------------------------------------------- 1 | FROM python:3.12 2 | COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ 3 | 4 | WORKDIR /workdir 5 | 6 | COPY ./pyproject.toml ./uv.lock /workdir/ 7 | 8 | RUN uv sync --no-install-project 9 | 10 | ENV PATH="/workdir/.venv/bin:$PATH" 11 | ENV PYTHONPATH=/workdir 12 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/typefully/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TYPEFULLY", 3 | "description": "Typefully is a Twitter/X writing platform that helps users create, schedule, and publish better tweets and threads. It provides powerful API capabilities for draft management and content scheduling." 4 | } 5 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/adhoc/__init__.py: -------------------------------------------------------------------------------- 1 | from .convert_integrations_to_mcp import convert as convert_integrations_to_mcp 2 | from .convert_integrations_to_virtual_mcp import convert as convert_integrations_to_virtual_mcp 3 | 4 | __all__ = ["convert_integrations_to_mcp", "convert_integrations_to_virtual_mcp"] 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/microsoft_onedrive/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MICROSOFT_ONEDRIVE", 3 | "description": "The Microsoft Graph OneDrive API enables access to files and folders stored in OneDrive. This integration allows reading, managing, and searching OneDrive content on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/mcp/__init__.py: -------------------------------------------------------------------------------- 1 | from aci.cli.commands.mcp.generate_tools import generate_tools 2 | from aci.cli.commands.mcp.upsert_server import upsert_mcp_server 3 | from aci.cli.commands.mcp.upsert_tools import upsert_mcp_tools 4 | 5 | __all__ = ["generate_tools", "upsert_mcp_server", "upsert_mcp_tools"] 6 | -------------------------------------------------------------------------------- /backend/aci/mcp/routes/handlers/__init__.py: -------------------------------------------------------------------------------- 1 | from aci.mcp.routes.handlers.initialize import handle_initialize 2 | from aci.mcp.routes.handlers.tools_call import handle_tools_call 3 | from aci.mcp.routes.handlers.tools_list import handle_tools_list 4 | 5 | __all__ = ["handle_initialize", "handle_tools_call", "handle_tools_list"] 6 | -------------------------------------------------------------------------------- /backend/aci/mcp/routes/health.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | 3 | from aci.common.logging_setup import get_logger 4 | 5 | logger = get_logger(__name__) 6 | router = APIRouter() 7 | 8 | 9 | # TODO: add more checks? 10 | @router.get("", include_in_schema=False) 11 | async def health() -> bool: 12 | return True 13 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/microsoft_calendar/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MICROSOFT_CALENDAR", 3 | "description": "The Microsoft Graph Calendar API enables access to Microsoft Calendar data including events, calendars, and scheduling. This integration allows reading and managing calendar content on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/microsoft_teams/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MICROSOFT_TEAMS", 3 | "description": "The Microsoft Graph Teams API enables access to Microsoft Teams data including teams, channels, messages, and team settings. This integration allows managing Teams content and collaboration on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/active_campaign/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ACTIVE_CAMPAIGN", 3 | "description": "ActiveCampaign is a customer experience automation (CXA) platform that combines email marketing, marketing automation, sales automation and CRM capabilities to help businesses build better relationships with customers." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/coda/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CODA", 3 | "description": "Coda is a document editor that brings together documents, spreadsheets, and applications into a single flexible platform. It allows teams to collaborate in real-time, create interactive documents, and build custom workflows without coding." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_docs/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_DOCS", 3 | "description": "The Google Docs API allows developers to create, read, and update Google Docs documents programmatically. It provides access to Google Docs through RESTful HTTP calls, including create, read and update the Google Docs document." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/hackernews/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HACKERNEWS", 3 | "description": "Hacker News is a social news website focusing on computer science and entrepreneurship, run by Y Combinator. This API allows you to fetch top stories, new stories, ask stories, show stories, and job postings from Hacker News." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/microsoft_outlook/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MICROSOFT_OUTLOOK", 3 | "description": "The Microsoft Graph Outlook API enables access to Microsoft Outlook data including emails, folders, contacts, and mail settings. This integration allows reading and managing Outlook content on behalf of the user." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/features/connected-accounts/types/mcp-server-configuration.types.ts: -------------------------------------------------------------------------------- 1 | export type MCPServerBasic = { 2 | id: string; 3 | name: string; 4 | description?: string; 5 | }; 6 | 7 | export type MCPServerConfigurationBasic = { 8 | id: string; 9 | mcp_server_id: string; 10 | mcp_server: MCPServerBasic; 11 | }; 12 | -------------------------------------------------------------------------------- /backend/aci/control_plane/routes/health.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | 3 | from aci.common.logging_setup import get_logger 4 | 5 | logger = get_logger(__name__) 6 | router = APIRouter() 7 | 8 | 9 | # TODO: add more checks? 10 | @router.get("", include_in_schema=False) 11 | async def health() -> bool: 12 | return True 13 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/routes/health.py: -------------------------------------------------------------------------------- 1 | from fastapi import APIRouter 2 | 3 | from aci.common.logging_setup import get_logger 4 | 5 | logger = get_logger(__name__) 6 | router = APIRouter() 7 | 8 | 9 | # TODO: add more checks? 10 | @router.get("", include_in_schema=False) 11 | async def health() -> bool: 12 | return True 13 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/airtable/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AIRTABLE", 3 | "description": "Airtable is a cloud-based platform that combines the functionality of a database with the visual interface of a spreadsheet. It allows users to organize and track information, collaborate with team members, and create custom applications." 4 | } 5 | -------------------------------------------------------------------------------- /backend/aci/control_plane/services/mcp_tools/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | MCP Tools Services 3 | 4 | This package provides services for interacting with MCP server tools. 5 | """ 6 | 7 | from .mcp_tools_fetcher import MCPToolsFetcher 8 | from .mcp_tools_manager import MCPToolsManager 9 | 10 | __all__ = ["MCPToolsFetcher", "MCPToolsManager"] 11 | -------------------------------------------------------------------------------- /frontend/sentryoptions.ts: -------------------------------------------------------------------------------- 1 | export const SentryOptions = { 2 | development: { 3 | tracesSampleRate: 1, 4 | replaysSessionSampleRate: 1, 5 | replaysOnErrorSampleRate: 1, 6 | }, 7 | production: { 8 | tracesSampleRate: 0.1, 9 | replaysSessionSampleRate: 0.1, 10 | replaysOnErrorSampleRate: 1, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /frontend/src/app/(dashboard)/teams/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { TeamsSettings } from "@/features/settings/components/teams-settings"; 4 | 5 | export default function TeamsSettingsPage() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS-specific 2 | .DS_Store 3 | Thumbs.db 4 | 5 | # IDE 6 | .vscode/ 7 | .idea/ 8 | *.swp 9 | *.swo 10 | *~ 11 | 12 | # Environment variables 13 | .env 14 | .env.local 15 | .env.*.local 16 | 17 | # Temporary files 18 | tmp/ 19 | temp/ 20 | *.tmp 21 | 22 | # Logs 23 | *.log 24 | 25 | # Secrets 26 | *.secrets.* 27 | .secrets.* 28 | -------------------------------------------------------------------------------- /frontend/src/app/(dashboard)/members/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { MembersSettings } from "@/features/settings/components/members-settings"; 4 | 5 | export default function MembersPage() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/app/(dashboard)/teams/new/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { NewTeamSettings } from "@/features/settings/components/new-team-settings"; 4 | 5 | export default function NewTeamPage() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/eleven_labs/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ELEVEN_LABS", 3 | "description": "Eleven Labs is an advanced text-to-speech (TTS) platform that provides high-quality, natural Text To Speech services. It allows users to create custom voices, convert text into realistic speech, and supports multiple languages and sound styles." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/app/(landing)/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect } from "react"; 4 | import { useRouter } from "next/navigation"; 5 | 6 | export default function LandingPage() { 7 | const router = useRouter(); 8 | 9 | useEffect(() => { 10 | router.replace("/mcp-servers"); 11 | }, [router]); 12 | 13 | return null; 14 | } 15 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/zenrows/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ZENROWS", 3 | "description": "ZenRows is a powerful web scraping API that simplifies data extraction from any website. It handles rotating proxies, headless browsers, CAPTCHAs, and advanced anti-bot systems, providing a seamless solution for developers and businesses to collect web data efficiently." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_meet/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_MEET", 3 | "description": "The Google Meet API allows developers to access and manage Google Meet resources programmatically. It provides information about meetings, participants, and recordings through RESTful HTTP calls including listing conference records, participants, and meeting spaces." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/cognito_forms/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "COGNITO_FORMS", 3 | "description": "Cognito Forms is a powerful online form builder that allows users to create custom forms, collect data, and automatically process payments. The tool supports complex field types, conditional logic, calculated fields, file uploads, and multiple integration options." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/one_signal/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ONE_SIGNAL", 3 | "description": "OneSignal is a comprehensive customer engagement solution that provides push notifications, in-app messaging, email, and SMS services. This integration enables managing and sending cross-platform notifications, tracking user engagement, and accessing notification analytics." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils"; 2 | 3 | function Skeleton({ className, ...props }: React.ComponentProps<"div">) { 4 | return ( 5 |
10 | ); 11 | } 12 | 13 | export { Skeleton }; 14 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/ultra_msg/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ULTRA_MSG", 3 | "description": "Ultra Msg is a WhatsApp API service that allows users to send and receive WhatsApp messages, manage contacts and groups, and automate WhatsApp workflows. This integration allows you to programmatically send text, pictures, documents and other media types of messages through WhatsApp." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/app/(dashboard)/organization-settings/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { OrganizationSettings } from "@/features/settings/components/organization-settings"; 4 | 5 | export default function OrganizationSettingsPage() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/components/theme-provider.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import * as React from "react"; 4 | import { ThemeProvider as NextThemesProvider } from "next-themes"; 5 | 6 | export function ThemeProvider({ 7 | children, 8 | ...props 9 | }: React.ComponentProps) { 10 | return {children}; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/instrumentation.ts: -------------------------------------------------------------------------------- 1 | import * as Sentry from "@sentry/nextjs"; 2 | 3 | export async function register() { 4 | if (process.env.NEXT_RUNTIME === "nodejs") { 5 | await import("../sentry.server.config"); 6 | } 7 | 8 | if (process.env.NEXT_RUNTIME === "edge") { 9 | await import("../sentry.edge.config"); 10 | } 11 | } 12 | 13 | export const onRequestError = Sentry.captureRequestError; 14 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/arxiv/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ARXIV", 3 | "description": "arXiv is an open-access repository of electronic preprints and postprints approved for posting after moderation, but not peer review. It consists of scientific papers in the fields of mathematics, physics, astronomy, electrical engineering, computer science, quantitative biology, statistics, mathematical finance and economics." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"; 4 | 5 | const Collapsible = CollapsiblePrimitive.Root; 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent; 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent }; 12 | -------------------------------------------------------------------------------- /frontend/src/lib/feature-flags.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Feature flag utilities for controlling application features 3 | */ 4 | 5 | /** 6 | * Check if subscription features are enabled 7 | * @returns {boolean} True if subscription features should be shown 8 | */ 9 | export function isSubscriptionEnabled(): boolean { 10 | const enabled = process.env.NEXT_PUBLIC_SUBSCRIPTION_ENABLED === "true"; 11 | return enabled; 12 | } 13 | -------------------------------------------------------------------------------- /backend/aci/control_plane/services/oauth2_client/__init__.py: -------------------------------------------------------------------------------- 1 | from .client_registrator import ClientRegistrator 2 | from .metadata_fetcher import MetadataFetcher 3 | from .schema import OAuthClientInformationFull, OAuthClientMetadata, OAuthMetadata 4 | 5 | __all__ = [ 6 | "ClientRegistrator", 7 | "MetadataFetcher", 8 | "OAuthClientInformationFull", 9 | "OAuthClientMetadata", 10 | "OAuthMetadata", 11 | ] 12 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/cal/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CAL", 3 | "description": "Cal.com is a fully customizable scheduling platform that enables individuals and teams to automate meeting bookings, manage availability, and integrate with popular calendar and productivity tools. With Cal.com, users can streamline appointment scheduling, avoid double bookings, and enhance collaboration through flexible, privacy-focused solutions." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/google_maps/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GOOGLE_MAPS", 3 | "description": "Navigate your world faster and easier with Google Maps. Over 220 countries and territories mapped and hundreds of millions of businesses and places on the map. Get real-time GPS navigation, traffic, and transit info, and find what you need by getting the latest information on businesses, including grocery stores, pharmacies and other important places." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/slack/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SLACK", 3 | "description": "Slack is a team communication and collaboration tool. This API allows you to interact with Slack in two ways: as a bot for automated tasks and workflows, or as a user to perform actions on behalf of a real Slack user. Whether you're building chatbots, automating workflows, or integrating Slack with other tools, this API provides the flexibility to suit your needs." 4 | } 5 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/discord/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DISCORD", 3 | "description": "Discord is a voice, video, and text communication service. This API allows you to interact with Discord in two ways: as a bot for automated tasks and workflows, or as a user to perform actions on behalf of a real Discord user. Whether you're building chatbots, automating workflows, or integrating Discord with other tools, this API provides the flexibility to suit your needs." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [...compat.extends("next/core-web-vitals", "next/typescript")]; 13 | 14 | export default eslintConfig; 15 | -------------------------------------------------------------------------------- /frontend/public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/open_weather_map/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "OPEN_WEATHER_MAP", 3 | "description": "OpenWeatherMap provides comprehensive weather data including current conditions and 5-day/3-hour forecasts. The API delivers accurate weather information based on the proprietary OpenWeather Model. This integration uses the free API endpoints (Current Weather Data and 5-day/3-hour Forecast) which are available on the free plan with a limit of 1,000 calls per day." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/lib/format.ts: -------------------------------------------------------------------------------- 1 | export function formatDate( 2 | date: Date | string | number | undefined, 3 | opts: Intl.DateTimeFormatOptions = {}, 4 | ) { 5 | if (!date) return ""; 6 | 7 | try { 8 | return new Intl.DateTimeFormat("en-US", { 9 | month: opts.month ?? "long", 10 | day: opts.day ?? "numeric", 11 | year: opts.year ?? "numeric", 12 | ...opts, 13 | }).format(new Date(date)); 14 | } catch { 15 | return ""; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/mock_data/__init__.py: -------------------------------------------------------------------------------- 1 | from aci.cli.commands.mock_data.create_dummy_tool_call_logs import create_dummy_tool_call_logs 2 | from aci.cli.commands.mock_data.create_mock_mcp_configuration import create_mock_mcp_configuration 3 | from aci.cli.commands.mock_data.create_mock_org_teams_users import create_mock_org_teams_users 4 | 5 | __all__ = [ 6 | "create_dummy_tool_call_logs", 7 | "create_mock_mcp_configuration", 8 | "create_mock_org_teams_users", 9 | ] 10 | -------------------------------------------------------------------------------- /frontend/vitest.config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | import react from "@vitejs/plugin-react"; 3 | import tsconfigPaths from "vite-tsconfig-paths"; 4 | import path from "path"; 5 | 6 | export default defineConfig({ 7 | plugins: [tsconfigPaths(), react()], 8 | test: { 9 | setupFiles: ["./vitest.setup.ts"], 10 | environment: "jsdom", 11 | }, 12 | resolve: { 13 | alias: { 14 | "@": path.resolve(__dirname, "./src"), 15 | }, 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /frontend/src/app/(dashboard)/teams/[teamId]/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useParams } from "next/navigation"; 4 | import { TeamDetailSettings } from "@/features/settings/components/team-detail-settings"; 5 | 6 | export default function TeamDetailPage() { 7 | const params = useParams(); 8 | const teamId = params.teamId as string; 9 | 10 | return ( 11 |
12 | 13 |
14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /backend/aci/virtual_mcp/dependencies.py: -------------------------------------------------------------------------------- 1 | from collections.abc import Generator 2 | 3 | from sqlalchemy.orm import Session 4 | 5 | from aci.common import utils 6 | from aci.common.logging_setup import get_logger 7 | from aci.virtual_mcp import config 8 | 9 | logger = get_logger(__name__) 10 | 11 | 12 | def yield_db_session() -> Generator[Session, None, None]: 13 | db_session = utils.create_db_session(config.DB_FULL_URL) 14 | try: 15 | yield db_session 16 | finally: 17 | db_session.close() 18 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/discord/tools.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "DISCORD__GET_CURRENT_USER", 4 | "description": "Get a user object for the current user.", 5 | "tool_metadata": { 6 | "type": "rest", 7 | "method": "GET", 8 | "endpoint": "https://discord.com/api/v10/users/@me" 9 | }, 10 | "input_schema": { 11 | "type": "object", 12 | "properties": {}, 13 | "required": [], 14 | "visible": [], 15 | "additionalProperties": false 16 | } 17 | } 18 | ] 19 | -------------------------------------------------------------------------------- /frontend/src/features/settings/hooks/use-plans.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from "@tanstack/react-query"; 2 | import { useMetaInfo } from "@/components/context/metainfo"; 3 | import { subscriptionApi } from "../api/subscription"; 4 | 5 | export function usePlans() { 6 | const { activeOrg, accessToken } = useMetaInfo(); 7 | 8 | return useQuery({ 9 | queryKey: ["plans", activeOrg?.orgId], 10 | queryFn: () => subscriptionApi.getPlans(accessToken), 11 | enabled: !!accessToken && !!activeOrg?.orgId, 12 | }); 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/features/teams/types/team.types.ts: -------------------------------------------------------------------------------- 1 | export interface TeamMember { 2 | user_id: string; 3 | name: string; 4 | email: string; 5 | role: string; 6 | created_at: string; 7 | } 8 | 9 | export interface Team { 10 | team_id: string; 11 | name: string; 12 | description?: string; 13 | member_count?: number; 14 | status?: "active" | "inactive"; 15 | created_at: string; 16 | } 17 | 18 | export interface CreateTeamRequest { 19 | name: string; 20 | description?: string; 21 | member_user_ids?: string[]; 22 | } 23 | -------------------------------------------------------------------------------- /backend/virtual_mcp_servers/e2b/tools.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "E2B__RUN_CODE", 4 | "description": "Runs code in an E2B.dev sandbox", 5 | "tool_metadata": { 6 | "type": "connector" 7 | }, 8 | "input_schema": { 9 | "type": "object", 10 | "properties": { 11 | "code": { 12 | "type": "string", 13 | "description": "The python code to run in the sandbox" 14 | } 15 | }, 16 | "required": ["code"], 17 | "additionalProperties": false 18 | } 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /backend/compose.ci.yml: -------------------------------------------------------------------------------- 1 | services: 2 | # Override the runner service in compose.yml to use the CI environment variables 3 | # to run tests 4 | control_plane: 5 | environment: 6 | - CONTROL_PLANE_OPENAI_API_KEY=${CONTROL_PLANE_OPENAI_API_KEY?} 7 | - CLI_OPENAI_API_KEY=${CLI_OPENAI_API_KEY?} 8 | test-runner: 9 | environment: 10 | - CONTROL_PLANE_OPENAI_API_KEY=${CONTROL_PLANE_OPENAI_API_KEY?} 11 | - CLI_OPENAI_API_KEY=${CLI_OPENAI_API_KEY?} 12 | command: > 13 | /bin/sh -c "alembic upgrade head && uv run pytest" 14 | -------------------------------------------------------------------------------- /frontend/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/globals.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } 22 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[python]": { 3 | "editor.formatOnSave": true, 4 | "editor.defaultFormatter": "charliermarsh.ruff" 5 | }, 6 | "[json][javascript][typescript][typescriptreact]": { 7 | "editor.formatOnSave": true, 8 | "editor.defaultFormatter": "esbenp.prettier-vscode" 9 | }, 10 | "prettier.ignorePath": "frontend/.prettierignore", 11 | "editor.formatOnSave": true, 12 | "editor.codeActionsOnSave": { 13 | "source.organizeImports.ruff": "always" 14 | }, 15 | "ruff.lint.enable": true 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/features/settings/types/organization.types.ts: -------------------------------------------------------------------------------- 1 | export enum OrganizationRole { 2 | Admin = "admin", 3 | Member = "member", 4 | } 5 | 6 | export interface OrganizationUser { 7 | user_id: string; 8 | email: string; 9 | role: string; // Will be "admin" or "member" from backend 10 | name: string; // Full name from backend 11 | created_at?: string; 12 | // Frontend display fields (parsed from name) 13 | first_name?: string; 14 | last_name?: string; 15 | } 16 | 17 | export interface OrganizationMemberUpdate { 18 | role: OrganizationRole; 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/lib/safe-redirect.ts: -------------------------------------------------------------------------------- 1 | const FALLBACK_ORIGIN = "http://localhost"; 2 | 3 | export function sanitizeRedirectPath(path: string | null | undefined): string | null { 4 | if (!path) { 5 | return null; 6 | } 7 | 8 | if (!path.startsWith("/") || path.startsWith("//")) { 9 | return null; 10 | } 11 | 12 | try { 13 | const url = new URL(path, FALLBACK_ORIGIN); 14 | return `${url.pathname}${url.search}${url.hash}`; 15 | } catch (error) { 16 | console.error("Failed to sanitize redirect path", error); 17 | return null; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/aci/control_plane/services/subscription/stripe_client.py: -------------------------------------------------------------------------------- 1 | from stripe import StripeClient 2 | 3 | from aci.control_plane import config 4 | 5 | _stripe_client_instance = None 6 | 7 | 8 | def get_stripe_client() -> StripeClient: 9 | global _stripe_client_instance 10 | if _stripe_client_instance is None: 11 | if config.SUBSCRIPTION_STRIPE_SECRET_KEY is None: 12 | raise ValueError("SUBSCRIPTION_STRIPE_SECRET_KEY is not set") 13 | _stripe_client_instance = StripeClient(config.SUBSCRIPTION_STRIPE_SECRET_KEY) 14 | return _stripe_client_instance 15 | -------------------------------------------------------------------------------- /backend/Dockerfile.migration: -------------------------------------------------------------------------------- 1 | FROM python:3.12 2 | COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ 3 | 4 | WORKDIR /workdir 5 | 6 | COPY ./pyproject.toml ./uv.lock /workdir/ 7 | RUN uv sync --no-dev --no-install-project 8 | 9 | ENV PATH="/workdir/.venv/bin:$PATH" 10 | ENV PYTHONPATH=/workdir 11 | 12 | # .env files will be skipped by default specified in .dockerignore 13 | COPY ./aci/alembic /workdir/aci/alembic 14 | COPY ./aci/common /workdir/aci/common 15 | COPY ./alembic.ini /workdir/alembic.ini 16 | COPY ./aci/__init__.py /workdir/aci/__init__.py 17 | 18 | CMD ["uv", "run", "alembic", "upgrade", "head"] 19 | -------------------------------------------------------------------------------- /backend/aci/cli/config.py: -------------------------------------------------------------------------------- 1 | from aci.common.utils import check_and_get_env_variable, construct_db_url 2 | 3 | DB_SCHEME = check_and_get_env_variable("CLI_DB_SCHEME") 4 | DB_USER = check_and_get_env_variable("CLI_DB_USER") 5 | DB_PASSWORD = check_and_get_env_variable("CLI_DB_PASSWORD") 6 | DB_HOST = check_and_get_env_variable("CLI_DB_HOST") 7 | DB_PORT = check_and_get_env_variable("CLI_DB_PORT") 8 | DB_NAME = check_and_get_env_variable("CLI_DB_NAME") 9 | DB_FULL_URL = construct_db_url(DB_SCHEME, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_NAME) 10 | 11 | OPENAI_API_KEY = check_and_get_env_variable("CLI_OPENAI_API_KEY") 12 | -------------------------------------------------------------------------------- /backend/mcp_servers/lmnt/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LMNT", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=LMNT", 4 | "transport_type": "streamable_http", 5 | "description": "LMNT is an API for text-to-speech and voice cloning.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/lmnt.jpg", 7 | "categories": ["Media"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "X-API-Key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/aci/cli/commands/subscription/data/gate22_plans.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "plan_code": "GATE22_FREE_PLAN", 4 | "display_name": "Free", 5 | "is_public": true, 6 | "stripe_price_id": null, 7 | "max_seats_for_subscription": 2, 8 | "max_custom_mcp_servers": 1, 9 | "log_retention_days": 3 10 | }, 11 | { 12 | "plan_code": "GATE22_TEAM_PLAN", 13 | "display_name": "Team", 14 | "is_public": true, 15 | "stripe_price_id": "", 16 | "max_seats_for_subscription": null, 17 | "max_custom_mcp_servers": 5, 18 | "log_retention_days": 7 19 | } 20 | ] 21 | -------------------------------------------------------------------------------- /backend/aci/common/sentry.py: -------------------------------------------------------------------------------- 1 | import sentry_sdk 2 | 3 | from aci.common.enums import Environment 4 | 5 | 6 | def setup_sentry(dsn: str, environment: Environment) -> None: 7 | sentry_sdk.init( 8 | dsn=dsn, 9 | environment=environment, 10 | # Add data like request headers and IP for users, 11 | # see https://docs.sentry.io/platforms/python/data-management/data-collected/ for more info 12 | send_default_pii=True, 13 | traces_sample_rate=1.0, # TODO: adjust later 14 | _experiments={ 15 | "continuous_profiling_auto_start": True, 16 | }, 17 | ) 18 | -------------------------------------------------------------------------------- /backend/aci/control_plane/tests/dummy_mcp_servers/gmail/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GMAIL", 3 | "url": "https://mcp.gmail.com/mcp", 4 | "transport_type": "streamable_http", 5 | "description": "Gmail API is a REST API to manage Gmail accounts.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/gmail.svg", 7 | "categories": ["Productivity", "Email"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "X-API-Key" 13 | } 14 | ], 15 | "server_metadata": {} 16 | } 17 | -------------------------------------------------------------------------------- /backend/mcp_servers/dexscreener/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DEXSCREENER", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=DEXSCREENER", 4 | "transport_type": "streamable_http", 5 | "description": "DexScreener API integration for accessing token and pair information from decentralized exchanges.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/dexscreener.svg", 7 | "categories": ["Finance", "Blockchain"], 8 | "auth_configs": [ 9 | { 10 | "type": "no_auth" 11 | } 12 | ], 13 | "server_metadata": { 14 | "is_virtual_mcp_server": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/features/connected-accounts/types/connectedaccount.types.ts: -------------------------------------------------------------------------------- 1 | import { MCPServerConfigurationBasic } from "./mcp-server-configuration.types"; 2 | import { ConnectedAccountOwnership } from "@/features/mcp/types/mcp.types"; 3 | 4 | export type ConnectedAccount = { 5 | id: string; 6 | user_id: string; 7 | mcp_server_configuration_id: string; 8 | ownership: ConnectedAccountOwnership; 9 | created_at: string; 10 | updated_at: string; 11 | last_used_at?: string; 12 | mcp_server_configuration: MCPServerConfigurationBasic; 13 | user?: { 14 | id: string; 15 | name: string; 16 | email: string; 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /frontend/src/utils/time.ts: -------------------------------------------------------------------------------- 1 | import dayjs from "dayjs"; 2 | import utc from "dayjs/plugin/utc"; 3 | import timezone from "dayjs/plugin/timezone"; 4 | 5 | dayjs.extend(utc); 6 | dayjs.extend(timezone); 7 | 8 | const USER_TIMEZONE = dayjs.tz.guess(); 9 | 10 | export function formatToLocalTime( 11 | date: Date | string, 12 | format: string = "DD/MM/YYYY HH:mm:ss", 13 | ): string { 14 | return dayjs.utc(date).tz(USER_TIMEZONE).format(format); 15 | } 16 | 17 | export function formatToUTCTime( 18 | date: Date | string, 19 | format: string = "DD/MM/YYYY HH:mm:ss", 20 | ): string { 21 | return dayjs(date).utc().format(format); 22 | } 23 | -------------------------------------------------------------------------------- /backend/aci/common/schemas/user.py: -------------------------------------------------------------------------------- 1 | from uuid import UUID 2 | 3 | from pydantic import BaseModel 4 | 5 | from aci.common.enums import OrganizationRole 6 | 7 | 8 | class UserOrganizationInfo(BaseModel): 9 | organization_id: UUID 10 | organization_name: str 11 | role: OrganizationRole 12 | 13 | 14 | # Only used in getting own user profile, which discloses organization information 15 | class UserSelfProfile(BaseModel): 16 | user_id: UUID 17 | name: str 18 | email: str 19 | organizations: list[UserOrganizationInfo] 20 | 21 | 22 | class UserPublic(BaseModel): 23 | id: UUID 24 | name: str 25 | email: str 26 | -------------------------------------------------------------------------------- /backend/mcp_servers/coingecko/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "COINGECKO", 3 | "url": "https://mcp.api.coingecko.com/mcp", 4 | "transport_type": "streamable_http", 5 | "description": "CoinGecko is a comprehensive API for accessing cryptocurrency data and market information. It provides real-time market data, historical prices, and comprehensive market analysis tools.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/coingecko.svg", 7 | "categories": ["Finance", "Blockchain"], 8 | "auth_configs": [ 9 | { 10 | "type": "no_auth" 11 | } 12 | ], 13 | "server_metadata": {} 14 | } 15 | -------------------------------------------------------------------------------- /backend/mcp_servers/dify/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DIFY", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=DIFY", 4 | "transport_type": "streamable_http", 5 | "description": "Dify API for managing AI-driven tasks and workflows.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/dify.svg", 7 | "categories": ["Automation"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/browserbase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BROWSERBASE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=BROWSERBASE", 4 | "transport_type": "streamable_http", 5 | "description": "Browserbase is a platform for running headless browsers.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/browserbase.png", 7 | "categories": ["Browser", "Search & Scraping"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "x-bb-api-key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/discord/tools.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "DISCORD__GET_CURRENT_USER", 4 | "description": "Get a user object for the current user.", 5 | "tags": [], 6 | "tool_metadata": { 7 | "canonical_tool_name": "GET_CURRENT_USER", 8 | "canonical_tool_description_hash": "c60412789b5fda01cd52e3bbbce334ac56ded8deefa039fda6226208552abcc8", 9 | "canonical_tool_input_schema_hash": "d746974fa9afd5e951f76f9af38954b0ad7f436f2120dc974da65e5ee39f856f" 10 | }, 11 | "input_schema": { 12 | "type": "object", 13 | "required": [], 14 | "properties": {}, 15 | "additionalProperties": false 16 | } 17 | } 18 | ] 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/context7/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CONTEXT7", 3 | "url": "https://mcp.context7.com/mcp", 4 | "transport_type": "streamable_http", 5 | "description": "Context7 MCP pulls up-to-date, version-specific documentation and code examples straight from the source", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/context7.svg", 7 | "categories": ["Developer Tools"], 8 | "auth_configs": [ 9 | { 10 | "type": "no_auth" 11 | }, 12 | { 13 | "type": "api_key", 14 | "location": "header", 15 | "name": "CONTEXT7_API_KEY" 16 | } 17 | ], 18 | "server_metadata": {} 19 | } 20 | -------------------------------------------------------------------------------- /backend/aci/common/openai_client.py: -------------------------------------------------------------------------------- 1 | from openai import OpenAI 2 | 3 | _openai_client_instance = None 4 | 5 | 6 | def init_openai_client(api_key: str) -> None: 7 | """Initialize the OpenAI client when the app starts.""" 8 | global _openai_client_instance 9 | if _openai_client_instance is None: 10 | _openai_client_instance = OpenAI(api_key=api_key) 11 | 12 | 13 | def get_openai_client() -> OpenAI: 14 | """Get the OpenAI client instance. Must call init_openai_client() first.""" 15 | if _openai_client_instance is None: 16 | raise RuntimeError("OpenAI client not initialized. Call init_openai_client() first.") 17 | return _openai_client_instance 18 | -------------------------------------------------------------------------------- /frontend/src/hooks/use-mobile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | const MOBILE_BREAKPOINT = 768; 4 | 5 | export function useIsMobile() { 6 | const [isMobile, setIsMobile] = React.useState(undefined); 7 | 8 | React.useEffect(() => { 9 | const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); 10 | const onChange = () => { 11 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); 12 | }; 13 | mql.addEventListener("change", onChange); 14 | setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); 15 | return () => mql.removeEventListener("change", onChange); 16 | }, []); 17 | 18 | return !!isMobile; 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/aidbase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AIDBASE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=AIDBASE", 4 | "transport_type": "streamable_http", 5 | "description": "Integration with Aidbase API to manage resources and workflows.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/aidbase.svg", 7 | "categories": ["Integration", "Automation"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/render/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RENDER", 3 | "url": "https://mcp.render.com/mcp", 4 | "transport_type": "streamable_http", 5 | "description": "Render's Model Context Protocol (MCP) server enables you to manage your Render infrastructure directly from compatible AI apps.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/render.svg", 7 | "categories": ["Developer Tools", "Infrastructure"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": {} 17 | } 18 | -------------------------------------------------------------------------------- /backend/mcp_servers/holded/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HOLDED", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=HOLDED", 4 | "transport_type": "streamable_http", 5 | "description": "Holded API for managing team, employees, payroll, treasury, invoicing and other business operations.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/holded.svg", 7 | "categories": ["Finance", "HR & Workforce"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/anchor_browser/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ANCHOR_BROWSER", 3 | "url": "https://api.anchorbrowser.io/mcp", 4 | "transport_type": "streamable_http", 5 | "description": "Anchor is the platform for AI Agentic browser automation, which solves the challenge of automating workflows for web applications that lack APIs or have limited API coverage.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/anchor_browser.svg", 7 | "categories": ["Browser"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "anchor-api-key" 13 | } 14 | ], 15 | "server_metadata": {} 16 | } 17 | -------------------------------------------------------------------------------- /backend/mcp_servers/steel/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "STEEL", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=STEEL", 4 | "transport_type": "streamable_http", 5 | "description": "API for browser automation, web scraping, screenshot capture, and PDF generation with session management capabilities.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/steel.png", 7 | "categories": ["Search & Scraping", "Browser"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "steel-api-key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/.importlinter: -------------------------------------------------------------------------------- 1 | [importlinter] 2 | root_package = aci 3 | include_external_packages = true 4 | 5 | # 1) common must not depend on any feature modules 6 | [importlinter:contract:common_independent] 7 | name = Common must be independent 8 | type = forbidden 9 | source_modules = 10 | aci.common 11 | forbidden_modules = 12 | aci.cli 13 | aci.control_plane 14 | aci.mcp 15 | aci.virtual_mcp 16 | 17 | # 2) all non-common modules must not depend on each other 18 | [importlinter:contract:features_are_independent] 19 | name = Feature modules are independent of each other 20 | type = independence 21 | modules = 22 | aci.cli 23 | aci.control_plane 24 | aci.mcp 25 | aci.virtual_mcp 26 | -------------------------------------------------------------------------------- /backend/mcp_servers/aero_workflow/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AERO_WORKFLOW", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=AERO_WORKFLOW", 4 | "transport_type": "streamable_http", 5 | "description": "Aero is workflow & practice management built specifically with the modern cloud-based accounting firm in mind.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/aeroworkflow.svg", 7 | "categories": ["Productivity", "Automation"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "apikey" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/features/settings/components/settings-section.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode } from "react"; 2 | import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"; 3 | 4 | interface SettingsSectionProps { 5 | title: string; 6 | description: string; 7 | children: ReactNode; 8 | } 9 | 10 | export function SettingsSection({ title, description, children }: SettingsSectionProps) { 11 | return ( 12 | 13 | 14 | {title} 15 | {description} 16 | 17 | {children} 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /backend/mcp_servers/notte/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "NOTTE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=NOTTE", 4 | "transport_type": "streamable_http", 5 | "description": "Notte transforms the internet into a space where each website becomes a structured, navigable map for intelligent agents.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/notte.png", 7 | "categories": ["Search & Scraping"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/serpapi/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SERPAPI", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=SERPAPI", 4 | "transport_type": "streamable_http", 5 | "description": "SerpApi integration for web search, images, news, academic papers, and trends, providing access to Google Search, Images, News, Scholar, and Trends APIs.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/serpapi.svg", 7 | "categories": ["Search & Scraping"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "query", 12 | "name": "api_key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/features/teams/hooks/use-teams.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from "@tanstack/react-query"; 2 | import { useMetaInfo } from "@/components/context/metainfo"; 3 | import { listTeams } from "../api/team"; 4 | import { Team } from "../types/team.types"; 5 | 6 | export function useTeams() { 7 | const { activeOrg, accessToken } = useMetaInfo(); 8 | 9 | return useQuery({ 10 | queryKey: ["teams", activeOrg?.orgId], 11 | queryFn: () => { 12 | if (!accessToken || !activeOrg?.orgId) { 13 | throw new Error("Missing access token or organization ID"); 14 | } 15 | return listTeams(accessToken, activeOrg.orgId); 16 | }, 17 | enabled: !!accessToken && !!activeOrg?.orgId, 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/api_template/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "API_TEMPLATE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=API_TEMPLATE", 4 | "transport_type": "streamable_http", 5 | "description": "APITemplate.io is a template-based document generation service that allows you to create PDFs and other documents from HTML templates.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/apitemplate.svg", 7 | "categories": ["Document Management"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "X-API-KEY" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/supabase/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SUPABASE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=SUPABASE", 4 | "transport_type": "streamable_http", 5 | "description": "Supabase is an open-source Firebase alternative providing real-time databases, authentication, and more.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/supabase.svg", 7 | "categories": ["Data & Analytics", "Dev Tools"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/all_images/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ALL_IMAGES", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=ALL_IMAGES", 4 | "transport_type": "streamable_http", 5 | "description": "All-Images.ai API integration for image search and AI image generation. Provides capabilities for searching stock images and generating custom images using AI.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/all_images.svg", 7 | "categories": ["Media"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "api-key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/breezy/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BREEZY", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=BREEZY", 4 | "transport_type": "streamable_http", 5 | "description": "Breezy HR is an applicant tracking system that helps companies streamline their hiring process with features for job posting, candidate management, and interview scheduling.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/breezy.svg", 7 | "categories": ["HR"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/cloudflare/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CLOUDFLARE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=CLOUDFLARE", 4 | "transport_type": "streamable_http", 5 | "description": "The Cloudflare API allows programmatic control over your Cloudflare account, including DNS, DDoS protection, and more.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/cloudflare.png", 7 | "categories": ["Deployment"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/hackernews/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HACKERNEWS", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=HACKERNEWS", 4 | "transport_type": "streamable_http", 5 | "description": "Hacker News is a social news website focusing on computer science and entrepreneurship, run by Y Combinator. This API allows you to fetch top stories, new stories, ask stories, show stories, and job postings from Hacker News.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/hackernews.png", 7 | "categories": ["News"], 8 | "auth_configs": [ 9 | { 10 | "type": "no_auth" 11 | } 12 | ], 13 | "server_metadata": { 14 | "is_virtual_mcp_server": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /backend/mcp_servers/posthog/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "POSTHOG", 3 | "url": "https://mcp.posthog.com/sse", 4 | "transport_type": "sse", 5 | "description": "PostHog is an open-source product analytics platform. It helps teams understand how users interact with their applications and make data-driven decisions without needing to send data to third-party analytics vendors.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/posthog.svg", 7 | "categories": ["Analytics"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": {} 17 | } 18 | -------------------------------------------------------------------------------- /backend/mcp_servers/stripe/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "STRIPE", 3 | "url": "https://mcp.stripe.com", 4 | "transport_type": "streamable_http", 5 | "description": "The Stripe Model Context Protocol (MCP) server defines a set of tools that AI agents can use to interact with the Stripe API and search our knowledge base (including documentation and support articles).", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/stripe.svg", 7 | "categories": ["Dev Tools", "Payments"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": {} 17 | } 18 | -------------------------------------------------------------------------------- /backend/mcp_servers/accredible/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ACCREDIBLE", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=ACCREDIBLE", 4 | "transport_type": "streamable_http", 5 | "description": "Accredible integration for managing digital certificates and badges. Create, search, and generate PDFs for credentials.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/accredible.svg", 7 | "categories": ["Document Management"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Token" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/baidu_map/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BAIDU_MAP", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=BAIDU_MAP", 4 | "transport_type": "streamable_http", 5 | "description": "Baidu Map API is a set of map-based application interfaces for developers, providing services such as location search, geocoding, route planning, and real-time traffic conditions.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/baidu_map.svg", 7 | "categories": ["Location"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "query", 12 | "name": "ak" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import * as React from "react"; 4 | import * as LabelPrimitive from "@radix-ui/react-label"; 5 | 6 | import { cn } from "@/lib/utils"; 7 | 8 | function Label({ 9 | className, 10 | ...props 11 | }: React.ComponentProps) { 12 | return ( 13 | 21 | ); 22 | } 23 | 24 | export { Label }; 25 | -------------------------------------------------------------------------------- /frontend/src/components/ui/sonner.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useTheme } from "next-themes"; 4 | import { Toaster as Sonner, ToasterProps } from "sonner"; 5 | 6 | const Toaster = ({ ...props }: ToasterProps) => { 7 | const { theme = "system" } = useTheme(); 8 | 9 | return ( 10 | 23 | ); 24 | }; 25 | 26 | export { Toaster }; 27 | -------------------------------------------------------------------------------- /backend/mcp_servers/factorialhr/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FACTORIAL_HR", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=FACTORIAL_HR", 4 | "transport_type": "streamable_http", 5 | "description": "Factorial HR API provides comprehensive HR management capabilities including employee management, task tracking, webhooks, job catalog, and finance management.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/factorialhr.svg", 7 | "categories": ["HR & Workforce"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "x-api-key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/mcp_servers/baserow/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "BASEROW", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=BASEROW", 4 | "transport_type": "streamable_http", 5 | "description": "Baserow is an open source no-code database tool and Airtable alternative. Create your own database without technical experience.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/baserow.svg", 7 | "categories": ["Data & Analytics", "Productivity"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Token" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/daytona/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DAYTONA", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=DAYTONA", 4 | "transport_type": "streamable_http", 5 | "description": "Daytona provides secure and elastic infrastructure for running AI-generated code in isolated environments with sub-90ms sandbox creation time.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/daytona.svg", 7 | "categories": ["Sandboxes", "Code"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "baseUrl": ".", 17 | "paths": { 18 | "@/*": ["./src/*"] 19 | }, 20 | "plugins": [ 21 | { 22 | "name": "next" 23 | } 24 | ] 25 | }, 26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 27 | "exclude": ["node_modules"] 28 | } 29 | -------------------------------------------------------------------------------- /backend/mcp_servers/apaleo/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "APALEO", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=APALEO", 4 | "transport_type": "streamable_http", 5 | "description": "The open platform for modern hospitality. Hotel and apartment businesses run more efficiently on Apaleo today and use innovative apps to be ready for tomorrow.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/apaleo.svg", 7 | "categories": ["Hospitality"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/vercel/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "VERCEL", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=VERCEL", 4 | "transport_type": "streamable_http", 5 | "description": "The Vercel API allows programmatic control over deployments, projects, and integrations, including GitHub repository linking and deployment management.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/vercel.png", 7 | "categories": ["Deployment", "CI/CD"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "Authorization", 13 | "prefix": "Bearer" 14 | } 15 | ], 16 | "server_metadata": { 17 | "is_virtual_mcp_server": true 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/mcp_servers/scrapybara/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SCRAPYBARA", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=SCRAPYBARA", 4 | "transport_type": "streamable_http", 5 | "description": "Scrapybara is a web scraping API designed for developers. It provides a powerful, fast, and simple interface to scrape any webpage and extract structured content in real time.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/scrapybara.webp", 7 | "categories": ["Search & Scraping"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "header", 12 | "name": "x-api-key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/aci/alembic/script.py.mako: -------------------------------------------------------------------------------- 1 | """${message} 2 | 3 | Revision ID: ${up_revision} 4 | Revises: ${down_revision | comma,n} 5 | Create Date: ${create_date} 6 | 7 | """ 8 | from typing import Sequence, Union 9 | 10 | from alembic import op 11 | import sqlalchemy as sa 12 | ${imports if imports else ""} 13 | 14 | # revision identifiers, used by Alembic. 15 | revision: str = ${repr(up_revision)} 16 | down_revision: Union[str, None] = ${repr(down_revision)} 17 | branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)} 18 | depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)} 19 | 20 | 21 | def upgrade() -> None: 22 | ${upgrades if upgrades else "pass"} 23 | 24 | 25 | def downgrade() -> None: 26 | ${downgrades if downgrades else "pass"} 27 | -------------------------------------------------------------------------------- /backend/mcp_servers/akkio/server.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AKKIO", 3 | "url": "https://mcp.aci.dev/virtual/mcp?server_name=AKKIO", 4 | "transport_type": "streamable_http", 5 | "description": "Akkio is a no-code AI platform that enables businesses to build, deploy, and maintain AI solutions for predictive analytics, forecasting, and classification without requiring data science expertise.", 6 | "logo": "https://raw.githubusercontent.com/aipotheosis-labs/aipolabs-icons/refs/heads/main/apps/akkio.svg", 7 | "categories": ["Data & Analytics", "Automation"], 8 | "auth_configs": [ 9 | { 10 | "type": "api_key", 11 | "location": "query", 12 | "name": "api_key" 13 | } 14 | ], 15 | "server_metadata": { 16 | "is_virtual_mcp_server": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /frontend/src/components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react"; 2 | 3 | import { cn } from "@/lib/utils"; 4 | 5 | const Textarea = React.forwardRef< 6 | HTMLTextAreaElement, 7 | React.ComponentProps<"textarea"> 8 | >(({ className, ...props }, ref) => { 9 | return ( 10 |