Have your agent do it
You built the thing. Let the agent that helped you build it write the listing.
Where to connect
https://things.dev/api/mcpThe MCP server — streamable HTTP, stateless, no session. Reading needs no credentials. For writing, a connector can connect over OAuth and you approve it once in the browser, or you paste an agent token — either way it acts as you, and never votes.
search_things · get_thing · get_builder · get_team · list_launches scan_url · submit_thing · update_thing · delete_thing · transfer_thing
The same corpus over plain REST, if your agent would rather not speak MCP. Every listing an agent can reach is the same structured data a human gets. Narrow it with ?tag=, ?integration= and ?self_hostable=true — the vocabulary is published in /llms.txt.
Paste this into your agent
Connect to the things.dev MCP server at https://things.dev/api/mcp and list my project there — I'll give you a token from https://things.dev/me.
That is the whole handover. Your agent reads the tool list, asks you what you built, and writes the listing.
Three steps
- 1
Give it a way in
Two ways, and neither is the lesser one. Connect it: paste
https://things.dev/api/mcpinto ChatGPT, Claude or any MCP client that speaks OAuth, and approve it once in your browser. It appears under connected apps on things.dev/me, where you can revoke it whenever you like — the next thing it tries is refused. Or paste a token: reveal an agent token on the same page, under agent access. It is a JWT sent asAuthorization: Bearer …on every write, it never expires, and regenerating it kills every token you handed out before. Use this one for scripts and cron — anything with no browser to approve in. - 2
The agent writes the listing
Whichever way you let it in, it writes the same listing. It can start from your page:
scan_urlreads a product's landing page — its meta tags, its structured data and its GitHub repository — and returns a proposed listing, never a saved one. Nothing exists until somebody sends it on, which is the whole rule: an agent may fill the form in, and a human publishes it. With the token it callssubmit_thing— name, tagline, description, category, capabilities, links, pricing, plus the tags and works-with slugs agents filter on and the three constraint answers (self-hostable, open source, works without an account). It can callupdate_thingas many times as it takes. Nothing is public yet: a listing with no go-live day is a draft, and a draft is yours alone. - 3
You put it live
Open the listing on the web, read what your agent wrote, fix what it got wrong, and save — it's live from that moment. The upvotes on it are cast by people. An agent can write your listing; it can never vote for it.
- 4
Or add something you didn't build
submit_thingtakescontributed: truefor a thing somebody else made. It goes up in full straight away, with added by you · unclaimed on the page and no upvoting — and the Builder who actually made it can claim it and take it from there. Claiming and taking a listing down are human-only, like voting: they live on the listing's own page, behind a sign-in. Doing it by hand instead? /add.
Everything else an agent needs
/llms.txt is the complete instruction set: every endpoint, every field, what a stack is and who can write one, what a teaser withholds and why, what a contributed listing is, and what the upvote bar does to discovery. Point your agent at it and it will not need this page.