Connector, MCP or CLI?
Before you build anything, your agent checks what already reaches your tool and writes down the answer. About 20 to 30 minutes. Often the answer is a connector you turn on today.
Your agent can reach a tool three ways: a connector (also called an MCP) you switch on in your app's settings, a command-line tool (CLI) someone already made, or a CLI you build yourself. This blueprint picks the right one before you spend a day on the wrong one. You name one tool. Your agent checks what already exists for it, without installing or signing in to anything, walks a few questions and checks with you, tries the options in order, and writes the answer down with its evidence. Many people stop at the end of this card, and that is a good result.
A decision.md for one tool: the branch you chose, the evidence, the exact gap if there is one, and the next card to open. If it is a connector, it is added and one read-only call came back.
A CLI is about a day of work. A connector is a few minutes. Knowing which one this tool needs saves the day, or tells you it is worth spending.
Look first, touch nothing. Answer four questions from the docs. Check six states instead of trusting "available". Then try the five branches in order and stop at the first that fits.
You name the tool and three real tasks, answer from what you have seen, and approve any change to your app. If a sign-in opens, you complete it. The agent does the looking and the writing.
Four questions before you connect anything
Brands change their terms all the time, so ask these of any connector, MCP or CLI, whatever the logo.
- Can it read? What exactly: one calendar or all of them, one folder or the whole drive?
- Can it write? Reading your calendar and creating events on it are different powers. Grant the smaller one until the bigger one earns its place.
- Where does the raw data land? On the vendor's side, in your chat, in a file in your folder? Raw data never goes into git.
- Where is the off switch? Know the exact step that removes it before you add it. If you can't name the off switch, don't add it.
One more sits inside all four: what can the vendor see through it, and what does it keep? A small scope is the design, not caution for its own sake.
Is it really working?
"It's available" hides six different facts. Your agent checks each one and says which it confirmed, which it did not check, and which do not apply.
- Known. It exists, in the docs or in your app's list.
- Installed. It is actually on this computer, or added to this app.
- Reachable. This session can reach it right now.
- Signed in. There is a current sign-in or key for this exact account.
- Permitted. That account has the scope this job needs.
- Tested. One small, harmless call came back with a result you looked at.
Name the exact gap: "signed in, not tested", or "tested: it can't do task 2". Not "it doesn't work". Not every state applies: a connector that runs on the vendor's side installs nothing on your computer, so "installed" is not applicable there. One tested call proves that one call, not the whole service.
The order to try things
Five branches from Tyler Fisk's CLI method, checked in this order. Stop at the first one that fits.
- 1. A native connector or an MCP covers it. Use it. Turn it on. Write skills on top later if you want.
- 2. Someone shipped a good CLI. Borrow it. The vault has four: n8n CLI Toolkit, Slack CLI Toolkit, Zoom Automation Hub and gws CLI Connect.
- 3. The MCP covers most of it. Build a thin CLI for the gap. Wrap only the one or two missing operations and keep the MCP for the rest. A patch, not a replacement.
- 4. Nothing exists, or you need several accounts. Build one. That is part 2, Build Your Own CLI.
- 5. It's rare or low value. Skip it. Once a month, docs locked away, or a person does it in 90 seconds. Leave it manual and look again in three months.
Four signals pick the branch:
- Capability gap. A real task you tried and the connector could not do. A limit you worry about doesn't count.
- Multiple accounts. A connector added once holds one account. Keeping two accounts means adding it twice under two names, which gets clumsy fast. Personal and work, two workspaces, a client's: that is structural, and better skills on top won't fix it. A CLI picks the account per command.
- Who owns the sign-in. If the vendor's connector handles a hard sign-in for you, the bar for replacing it goes up.
- How often you do it. Daily work repays a build. A once-a-month task does not.
And on anything that writes, ask whose name goes on it. A connector usually acts as whoever connected it, so every post looks like you wrote it. For work that runs while you are not watching, you want a named bot, not you.
Haven't tried yet? Then it is branch 1 for now. Connect it, use it, and come back with the wall you hit.
Good reasons to build a CLI
If you do end up building, these are the reasons that hold:
- Control. Every operation the service's API has, not the subset the vendor chose.
- Several accounts. The account is picked per command.
- Scripting. A CLI runs in a script or on a schedule, and what it prints can feed straight into the next command.
- Repeatability. The same command gives the same result every time.
- Cost. A script or a schedule runs it with no model in the loop, so routine runs use no tokens.
- Owning the sign-in. Your key, kept in Infisical, that you can rotate or revoke. A run with nobody watching can't finish a connector's browser sign-in.
The connector is the fastest way to find out whether a tool is worth it. Move to a CLI once you use it every day and hit its limits. Some tools should stay an MCP for good: ones that keep a live connection open while they work, like a browser MCP that watches a web page as it runs (developers use these to find bugs on a page). A CLI would only take snapshots.
What happens in the half hour
Seven checkpoints. Here is what goes by.
- It copies the folder to
work/decide-connector-mcp-cli/. Nothing runs insidelab/. - You name one tool and three real tasks you do there, each marked read or write, plus how many accounts and how often.
- It checks what exists: a connector already in your app, one in the app's directory, the vendor's own MCP, a vault CLI, a published CLI. Read only.
- You answer the four questions and it checks the six states together with you.
- You walk the five branches with the four signals, and stop at the first that fits.
- It writes
decision.mdwith the branch, the evidence, the exact gap and the next card, and shows it to you. - It acts on the branch. Branch 1: it helps you add the connector and runs one read-only call. Branch 2: it links the vault CLI. Branch 3 or 4: it points you to Build Your Own CLI. Branch 5: it stops.
Adding one changes your app's settings outside the folder, so your agent says so first and waits for your yes. You complete any sign-in it opens.
claude mcp list # Claude Code: what is already connected codex mcp list # Codex: the same claude mcp add --transport http <name> <url> # Claude Code: adds the vendor's MCP, on your yes codex mcp add <name> --url <url> # Codex: the same /mcp # inside a Claude Code session: you finish the sign-in codex mcp login <name> # Codex: you finish the sign-in
Or use the app's connector settings: claude.ai/customize/connectors for Claude, or Settings, then MCP servers in the ChatGPT desktop app. If you sign in to Claude Code with a claude.ai account, the connectors you add there show up in Claude Code too.
What you can ask your agent
Five asks that work any time, for any tool.
List every connector and MCP you can use in this app right now. For each one, tell me which of the six states you can confirm without signing in to anything.
For my connector to this tool, check each state: known, installed, reachable, signed in, permitted, tested. Say confirmed, not checked or not applicable, with the evidence. Then name the exact gap.
I found this MCP and I'll paste the link. Before anything is installed, tell me who publishes it, whether it is the vendor's own, what it can read and write, and how I would turn it off.
I think my connector can't do this task, which I'll describe. Try it with a read-only call and tell me the exact operation that fails, or show me that it works.
Read work/decide-connector-mcp-cli/decision.md. Has anything changed since: how often I use it, how many accounts, a new vendor MCP or CLI? Tell me whether the branch should change.
Words you now own
- MCP server. A standard way for your agent to use another service's tools. Some run on your computer; most big ones run on the vendor's side at a web address.
- Connector. What Claude calls an MCP server you add in its settings. A native connector is one the app maker lists in its own directory.
- CLI. A tool you run by typing commands. Your agent runs it in the terminal and reads what it prints.
- Capability states. Known, installed, reachable, signed in, permitted, tested. Six facts that "available" hides.
- Capability gap. A specific task you tried that the connector could not do. Not a worry about one.
- Thin CLI. A small CLI that covers only what the MCP is missing, next to the MCP, not instead of it.
- Scope. What a sign-in is allowed to do: read only, or read and write, and on what.
- Named bot. A separate account for your automation, so what it posts or sends carries its name, not yours.
- Off switch. The exact step that removes a connection. Known before you add it.
Before you install anything
An MCP acts inside your account, with your sign-in. Choose which one with that in mind.
- Never install a random MCP. A list of "the best MCPs", a post, a search result: none of these is a reason. Check who publishes it.
- Prefer the vendor's own, or a native connector from your app's directory. For Claude, the Anthropic Directory at claude.ai/directory lists reviewed connectors.
- Watch anything that reads outside content. An MCP that pulls in web pages, an inbox or an issue tracker can carry text written to steer your agent. Keep its write scope small.
- Start read-only. The first call reads. Writing comes later, on purpose.
- It changes your app's settings, outside the folder. Your agent says so first and waits for your yes.
Some MCPs show a setup line with your key inside the address. That leaves the key in plain text in your app's settings. Look for the vendor's browser sign-in instead. If a tool truly needs a key, it goes in Infisical: see Keys, the First Time. And never paste a key, token or password into the chat.
Fair questions
That is the clearest case for a CLI. A connector added once holds one account. Keeping two accounts means adding it twice under two names, which gets clumsy fast. Check the vault first: one of the four may already cover your service. If not, it is branch 4.
No. The sign-in is the one step that proves it is you. Your agent adds the connector on your yes; you click through the sign-in it opens.
Not in Claude Code. By default it loads only the names of MCP tools when a session starts, and reads a tool's full details only when it needs that tool. So that alone is not a reason to build a CLI.
In Claude Code, toggle it off in /mcp, or run claude mcp remove with its name. In Codex, run codex mcp list to see its name, then codex mcp remove with that name. Turning it off stops new access. Anything already copied into your folders stays, and you revoke the vendor side in that vendor's account settings.