Connecting an assistant

Connect Claude or ChatGPT to this server and write scripts by describing what you want. It works with your projects as you, not as itself.

On this page

The idea #

The tools here are small: a few tables, a script, a trigger. That is exactly the size of thing a model is good at, and the loop that makes it work is not "write me some code" but write, test, read the error, fix. An assistant connected here can do all four, because testing a script is a tool it can call and the traceback comes back to it rather than to you.

What you get is the thing this whole product is for, one step shorter: you describe an integration, and what appears is a script in your project with an address you can paste into Stripe. You still read it. You still own it.

Connecting one #

Everything an assistant needs is one address. It is on your account page, with a Copy button.

ApplicationWhere to paste it
Claude Settings, then Connectors, then Add custom connector. Paste the address. You do not need to fill in a client id or secret.
ChatGPT Turn on Developer mode in settings, then Create, and paste the address with authentication set to OAuth.

You will be sent here to log in and shown a screen listing what is being asked for. Nothing is shared until you press Allow, and you can untick the permission to change things if you only want it to look.

What it can do, and what it cannot #

A connection acts as you, in the projects you are a member of. If you unticked the permission to change things, it can only read. In a project you cannot reach, it cannot see that the project exists.

The dividing line for everything else is one question: if it misunderstands you, can you undo it in a click? Creating a table, adding a column, allowing a host and installing a package all pass — you remove the wrong one on a screen. Dropping, renaming and retyping do not, because they take data or break code that named the old thing.

It canIt cannot
List your projects, tables, columns and relationships Create or delete a project
Create a table, add a column, add an index or a relationship Drop a table or a column, rename anything, change a column's type
Allow a host its scripts may call, and install packages Read or write your secrets, or create an API key
Read a script's source and the history of its runs Invite or remove people
Save a script, test it without writing, and run it Change who can reach the project, or its plan
Write, change and delete rows; run SQL that writes Reach a project you cannot reach yourself

The right-hand column is not a list of features nobody has built yet. Those operations have no tool at all, so no connection can reach them however it is asked. Secrets are the one worth spelling out: an assistant is told the names of your keys, because its code has to say secrets["STRIPE_KEY"], and is never told a value. Adding one is yours to do.

What a conversation looks like #

Say your project is called Shop and you already have an orders table. Something like:

What you say

        Write a script that takes Stripe checkout.session.completed events and puts them
        in the orders table. Test it with a realistic body, then tell me the address to
        give Stripe.
      

It looks at the project first, so the column names in the code are the ones you actually have. If the table is not there it creates it, with a unique index on the column the code looks rows up by — the thing that stops a redelivered webhook writing a second row. If the code needs to call an API it allows that host and installs the library. Then it saves the script, runs it against a test body, reads back the statements it would have run, and hands you the address.

Nothing was written to your table — a test reads your data but runs none of its writes — so if the mapping is wrong you say so and it tries again. The one thing it will stop and ask you for is a secret, such as a Stripe API key, because it cannot set one.

Two things worth knowing #

Check the name on the consent screen

An application can register itself here and choose its own name, so a screen saying "Claude" is that application's word, not ours. The screen tells you where you are about to be sent back to. If that is not where you started, press Deny.

Rows are data, not instructions

A webhook body, an imported spreadsheet or a customer's message can contain text that reads like an instruction, and an assistant reading your rows will read that too. Our defence is permissions: it can only ever do what you can do, and nothing that cannot be undone in a click is a tool it has, apart from deleting rows by id. That is a real limit, not a solved problem — treat an assistant with write access the way you would treat a new colleague with your password.

When it does not connect #

What you seeWhy, and what to do
The assistant cannot reach the server Claude and ChatGPT connect from their own servers, not from your computer, so the address has to answer from the internet over HTTPS. An address on localhost, a VPN or an office network cannot work.
An error about the resource, or invalid_target, after you log in This server issues tokens for one address, https://10lines.io/mcp, the one on your account page. Another name for the same server is another resource: paste that one exactly.
It keeps asking you to log in The connection was disconnected — from your account page, or because the account changed — and its tokens no longer work. Remove the connector in the assistant and add it again.
It reads, and every change is refused with insufficient_scope The permission to change things was unticked when you allowed it. Disconnect it on your account page and connect again, leaving it ticked.
Nothing under Connected apps on your account page The Allow step did not finish. Add the connector again and press Allow on the screen this server shows.
Registration refused with 429 Too many assistants registered from one address within a minute. Wait a minute and try again.
A connection left unused for a long time stops working Its tokens expired, and a registration with no tokens is removed after thirty days. Remove the connector and add it again.

Seeing what it did, and disconnecting #

Everything a connection changes is listed under the project's settings, in Activity: which application, for whom, the tool, the table, how many rows, and what it was asked. Kept 90 days, and downloadable as CSV.

Your account page lists every connection, what it was allowed to do and when it was last used. Disconnect stops it immediately — not at the end of the day, and not the next time it asks.