Skip to content

Extensions

Lucki74 edited this page Sep 2, 2026 · 6 revisions

Extensions

Draggy speaks the Model Context Protocol, so it can borrow tools from servers other people wrote. Turn on the GitHub server and the assistant can read your issues; turn on Postgres and it can query your database.

Settings → Extensions holds a catalogue of thirty-nine, grouped by what they are for.

What an extension actually is

This is worth being clear about before you switch one on.

An MCP server is a program. Draggy launches it with npx, which downloads the package from npm the first time, and then talks to it over its standard input and output. It runs on your machine, as you, with whatever credentials you typed into the panel.

So this is the one part of Draggy that runs code somebody else wrote. Nothing is enabled by default, nothing starts on its own, and every entry in the catalogue shows the exact package it will fetch — npx -y @modelcontextprotocol/server-github and so on — so you can go and read it first.

Switch one on only if you would be comfortable running that package from a terminal.

Turning one on

Find it in the catalogue and flip the switch. If it needs anything — an API token, a folder, a connection string — the switch opens the setup fields instead of starting a server that would fail. Fill them in and it starts.

A running server shows how many tools it contributed. Those tools become available to the model on your next message, named after the server, so github__create_issue rather than a bare create_issue that could have come from anywhere.

Switch it off and the tools disappear from the model's world immediately. Draggy stops every server when you quit.

What is in the catalogue

Development — Filesystem, GitHub, GitLab, Sentry, JetBrains IDEs, Context7 documentation, 21st.dev Magic

Web and search — Brave Search, Tavily, Exa, Perplexity, DuckDuckGo, Firecrawl, Playwright, Puppeteer, Browserbase

Productivity — Slack, Notion, Linear, Todoist, Obsidian, Google Drive, Google Maps

Databases — PostgreSQL, MongoDB, Redis, Elasticsearch, Supabase, Airtable

Cloud and infrastructure — Kubernetes, Cloudflare, Heroku, Stripe, AWS Knowledge Base

Knowledge and memory — Memory (a knowledge graph that survives between conversations), Sequential thinking, Everything (the reference server, useful for checking that MCP works at all)

Design — Figma

Media — YouTube transcripts

Some carry a warning in the panel, and they mean it. Filesystem can write and delete inside the folders you list. Stripe with a live key can move real money. Kubernetes does whatever your current kubeconfig context is allowed to do.

Credentials

Tokens are stored in the same local SQLite database as your chats, in the Draggy data folder, and are masked in the interface. That is the same protection your conversation history gets, which is honest but is not a keychain — if that matters for a particular token, use a scoped or read-only one.

Where extensions fit

They are ordinary tools once they are running. The model chooses between them and the built-in ones the same way, and the same caveat applies: a model below about 4B parameters is unreliable at tool calling and gets worse the more tools it has to choose between. Turning on twelve servers at once is a good way to make a small model worse.

Start with one.

When one will not start

The panel shows the error underneath the entry, including whatever the server wrote to its standard error, which is usually the only account of what went wrong.

Not configured yet — a required field is empty. Open the setup fields.

Did not answer in time — the package could not be fetched, or it needs a runtime you do not have. Check the package name in the panel against npm.

Stopped (exit code 1) — it started and rejected something, most often the credentials.

Settings → Data → Open logs has the rest.

Privacy

An extension is a hole you opened in the local-only story on purpose. The package comes from npm, and then the server talks to whatever service it is for — GitHub, Slack, your own database. Draggy is not in the middle of that and cannot be.

Everything else in the app still behaves as it always did. See the privacy note in the README.

Clone this wiki locally