Plugins
Connect bots to GitHub, Jira, Notion, Stripe, a browser, and dozens more services.
A plugin gives bots tools for a service or an app. Under the hood a plugin is one or more MCP servers.
The marketplace
Click the marketplace icon (four circles) at the bottom right of the sidebar, or choose File › Marketplace… (⇧⌘M, or Ctrl+Shift+M on Windows and Linux). It lists Featured Plugins and Featured Bots first, then everything by category. View all under a featured section lists every plugin or every bot. Search finds plugins and bots together. The marketplace comes from lorca.app, so new plugins and bots show up without updating Lorca.
The marketplace has these plugins:
| Category | Plugins |
|---|---|
| Productivity | Linear, Notion, Atlassian (Jira and Confluence), Google Calendar, Google Drive, Zapier, Todoist, ClickUp, Airtable, 飞书 (Feishu), 飞书项目 (Feishu Project), 滴答清单 (Dida365), 腾讯文档 (Tencent Docs) |
| Communication | Slack, Gmail, Telegram, Granola, Fireflies, Resend |
| Design | Canva, Miro, Webflow, 可灵 (Kling AI) |
| Code | GitHub, Sentry, Cloudflare, GitLab, Netlify, Railway, Expo |
| Data | Supabase, Neon, PostHog, Mixpanel, Amplitude |
| Sales | Attio, Close, Apollo.io |
| Finance | Stripe, PayPal, Mercury |
| Research | Context7 (library documentation), Browser (a browser the bot drives; see Browser), Exa (web search), DeepWiki, Hugging Face, 秘塔 AI 搜索 (Metaso), 知乎 (Zhihu), 高德地图 (Amap) |
| Support | Intercom |
Browser, Context7, DeepWiki, Exa, and Hugging Face work without an account. Zapier reaches apps that have no plugin here. Telegram, and Slack with its app's bot, also let a bot answer people in channels. The bots in the marketplace are ready-made teammates; see Bots, and its workflows set up an outcome in one go; see Workflows.
Plugins are installed per Runner. Every bot on that computer can use them, as far as its Access allows. Secrets and sign-ins stay on that Runner; your other devices only see the plugin's name and state.
On-demand tools
A bot starts a turn with only a small catalog of the plugins installed on its Runner. Lorca connects an MCP server and gives the model matching tool schemas only when the task needs that capability. The selected tools remain available for the rest of that turn, while unrelated plugin catalogs stay out of the model's context.
Install a plugin
- From a chat: ask the bot. "Install the GitHub plugin." It finds the plugin and posts a card asking your permission before it installs anything.
- From the app: open the marketplace and click Add beside a plugin. It installs on the Runner shown at the top of the marketplace; pick another one there if you have more. Add from Plugins… in a bot's inspector opens the marketplace on that bot's Runner, and Settings › Plugins on the Runner picked in the toolbar.
You can install a plugin on any Runner from your phone. The request travels to that computer encrypted.
Sign in
A plugin that needs an account posts a sign-in card in the chat: Sign in or Not now.
- GitHub shows a short code and a link (on the plugin's sheet too, when you sign in there). Enter the code on github.com from any device.
- Other services open their sign-in page on the device where you chose Sign in: that computer's browser, or the phone's own. You can sign a computer's plugin in from your phone with nobody at the computer.
Some plugins take a pasted token instead, which also suits a Runner with no browser: a GitHub personal access token, or an API key or token for Airtable, Cloudflare, Fireflies, Neon, PostHog, Resend, Stripe, Supabase, or Zapier. Context7 and Exa take an optional API key that raises their free limits, and Hugging Face a token that brings your own account. Fill it in on the plugin's sheet. Secret fields are write-only: once saved they are never shown again.
Named accounts
Slack, Gmail, Google Calendar, Google Drive, and Telegram take several accounts on one Runner, each with a name of its own: Gmail · Work and Gmail · Personal. In the marketplace, the service's page lists its accounts on the picked Runner with their state (Connected, Needs a sign-in, Needs more access, Needs setup, or Can't connect). Add, or Add Account… once there is one, asks for a name and opens the new account's sheet, where you rename it, set it up, and sign in. Settings › Plugins and a bot's inspector list each account on its own row.
Bots use each account by its name and ask you when it isn't clear which one you mean. Permission cards, Access, and call limits are per account. When a bot quotes an email, an event, a message, or a document, it keeps the link to it.
These services ask for an app of your own before the first sign-in:
- Gmail, Google Calendar, Google Drive: a Desktop OAuth client of your own in Google Cloud. One client covers all three: Your own Google client walks through it.
- Slack: a Slack app with PKCE, the redirect
http://localhost:3118/callback, and MCP access its workspace approved. Fill in its client ID. For channels, its bot and app tokens too. - Telegram: a bot's token from BotFather. Telegram is for channels.
An account that reads Needs more access was signed in without something a tool needs: Sign in again grants it. A sign-in that expired or was revoked asks for a new one.
Bots write emails and Slack messages as drafts that you send.
Your own Google client
Gmail, Google Calendar, and Google Drive sign in with a Google OAuth client you create in your own Google Cloud project. It takes about five minutes, and one client covers all three services.
Create a project
In the Google Cloud console, open the project picker, choose New project, name it anything (Lorca, say), and click Create.
Turn on the APIs
In APIs & Services › Library, turn on the ones you'll use: Gmail API, Google Calendar API, and Google Drive API.
Set up the consent screen
In Google Auth Platform, click Get started. Give the app a name (My Lorca) and your email as the support email, choose External as the audience, enter your email as the contact, agree to Google's policy, and click Create.
Publish it
In Google Auth Platform › Audience, click Publish app and confirm. An app left in Testing signs in only the test users you list there, and Google signs them out every seven days.
Create the client
In Google Auth Platform › Clients, click Create client, choose Desktop app as the application type, name it anything, and click Create. Copy the Client ID and Client secret, or click Download JSON: Google shows the secret only once.
Add the account in Lorca
In the marketplace, open Gmail (or Google Calendar, or Google Drive), click Add, and name the account (Work, say). In its sheet, paste the client ID into GOOGLE_CLIENT_ID and the secret into GOOGLE_CLIENT_SECRET, then click Save.
Sign in
Click Sign in and pick your Google account. Google says it hasn't verified this app: it's your own app, so click Advanced, then Go to My Lorca (unsafe), then Allow.
For Calendar and Drive, add their accounts the same way, with the same client ID and secret.
If something goes wrong:
- Access blocked, or not a test user: the app is still in Testing. Publish it, or add yourself under Audience › Test users.
- An API "has not been used in project": turn that API on under APIs & Services › Library, wait a minute, and try again.
- Signed out every week: the app is in Testing. Publish it.
What a plugin may do
A bot uses a plugin only as far as its Access allows. Reading runs right away. Anything that changes something, such as creating an issue, posting a comment, or deleting a page, goes through Auto-review, and asks you first when it should.
Manage a plugin
A plugin's sheet shows its state, its sign-in, its settings, its Call limit (see Limits), the actions you have always allowed (with Reset), and Remove. Marketplace plugins update themselves and keep your settings and sign-ins.
Your own MCP servers
Any MCP server can be a plugin: a command the Runner starts, such as npx -y @modelcontextprotocol/server-filesystem ~/Notes, uvx mcp-server-fetch, or a docker run, or the URL of a remote server that speaks streamable HTTP.
Settings › Plugins lists them under MCP Servers for the Runner picked in the toolbar. Add Server… takes a name and either the command (with its environment variables) or the URL (with its headers). Paste the JSON a server's README gives, or a whole mcpServers block from Claude Desktop or Cursor, into any field, and the sheet reads it; several servers are added at once. Once saved, the sheet shows whether the server started and the tools it offered, with Reconnect, a switch that turns it off, and Remove. A server you turn off keeps its settings and sign-in, and no bot sees it.
A remote server that needs an account asks for it when Lorca first connects: the server reads Needs a sign-in, and Sign in, on its sheet or on a card a bot posts, signs in with OAuth as for a marketplace plugin, and Sign Out on its sheet forgets the sign-in. A server that takes a token instead gets it in a header, such as Authorization: Bearer ….
The servers live in mcp.json in Lorca's folder (~/.lorca/mcp.json), in the format Claude Desktop, Cursor, and Claude Code use, so you can copy one from their configs or edit the file by hand. After editing it, click Reload on its row in Settings › Plugins, or run lorca mcp reload:
{
"mcpServers": {
"notes": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/Notes"],
"description": "My notes folder"
},
"linear": {
"type": "http",
"url": "https://mcp.linear.app/mcp"
},
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": { "CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}" },
"disabled": true
}
}
}${VAR} reads a variable from your shell's environment, and ${VAR:-default} falls back to the default; a header or variable whose value is not set is left out. description tells bots what the server is for, cwd is the folder a command starts in, timeout is how many seconds a call may go without an answer (ten minutes when unset), and "oauth": false stops a remote server from signing in. Lorca keeps the fields it does not know, and the order you wrote.
To keep some of a server's tools from bots, turn off their switches on the server's sheet, or write them in toolExposure, as pi does: { "delete_*": "hidden", "delete_draft": "codemode" } hides every tool whose name starts with delete_ except delete_draft, since a name wins over a pattern. "exposure": "hidden" hides every tool the server's toolExposure doesn't name.
A server that doesn't register apps on the fly takes the one you registered with it in oauth: clientId, clientSecret (which can be ${SECRET}), and the callbackPort or callbackUrl you registered, whose sign-in opens in the Runner's own browser. clientName registers Lorca under another name, for a server that only takes names it knows; scope asks for more access; and authServerMetadataUrl points at the right authorization server when the server names the wrong one. When a server answers that a call needs more access than the sign-in has, it asks you to sign in again, for that access too.
Bots call a server's tools by its name, notes__read_file, and reading tools run at once while the rest go through Auto-review, as for any plugin. A server that offers resources, such as files or records, also gets tools to list and read them, notes__list_mcp_resources and notes__read_mcp_resource; binary resources are saved to a file the bot can open. The command line manages the same file: lorca mcp add, list, get, remove, reload, sign-out, and import from another app.