The Connector Caught Up
When you maintain an app and a connector to that app, the connector is always behind. You ship litters in the app on Monday, and for some number of weeks after that, any agent connected to Meo Mai Moi is confidently telling people that litters do not exist.
This week the gap closed. meo-mcp v0.2.0, agent skill v0.3.0 and Meo Mai Moi v1.19.7 all line up, which happens rarely enough that it deserved its own release note.
Fifteen Tools for Things That Already Existed
The connector now covers the features the app has shipped since the gateway went live in July:
The litter family: get, create, rename, separate one member, and split the whole thing up. Pet payloads now carry litter membership, so an agent can answer whether two pets are littermates without guessing from birth dates.
The placement question tools: list, ask, answer, approve, hide, unhide, translate. An agent can now work the public Q&A on a listing.
cancel_placement_request and reopen_placement_request. These were missing for an embarrassing reason. The app names those endpoints “reject” and “confirm”, I went looking for cancel and reopen, and two perfectly reversible listing states stayed unreachable for a month because of vocabulary.
get_habit_pet_summary, the per-pet rollup that answers who has lapsed. That is usually the actual question behind “how are the cats doing”.
respond_to_placement_request no longer requires a helper profile, matching the one-tap response flow in the app.
Tool schemas now publish the narrowed formats for country and birth_month_year, so a model does not have to make a request to discover what shape a field wants. Every round trip a schema can prevent is one the user does not pay for.
MCP 2026-07-28, Plus Everything Before It
The gateway adopts MCP revision 2026-07-28 on the v2 Python SDK: stateless requests, no initialisation handshake, a cacheable tools/list, and a HeaderMismatch error when the Mcp-* headers disagree with the body. Every earlier revision still works from the same deployment.
Which is fortunate, because every client we have observed so far still negotiates 2025-06-18.
That is worth sitting with for a second. The gateway now logs the negotiated protocol version and method on every request, and it has to, because no MCP client tells the agent running inside it which revision it speaks. The agent has no way to know. The only way to learn what real clients actually do is to write it down at the door and read the logs later. /health reports the running version too, so a deployment can be confirmed from outside the host.
There is also protocol_probe.py in the repo for checking the 2026-07-28 behaviour against a live server, and 25 dependency upgrades including Starlette 1.6.0 and FastAPI 0.141.1.
The Skill Stops Asking for Everything
The agent skill is the part I would point at if you only read one section.
Meo Mai Moi has 26 OAuth scopes. When someone tells their agent “connect Meo Mai Moi”, the lazy implementation asks for all 26, because that guarantees whatever comes next will work. It also means a request to check a vaccination date quietly grants access to shared finances and messages.
v0.3.0 defaults a broad or unqualified connect request to an Everyday care preset: pets, health, habits, microchips. Full management, meaning all 26 scopes, sits behind an explicit choice and a sensitivity warning. If the agent later needs something outside the preset, it hits an insufficient-scope error and asks, which is the correct order of events.
The rest of v0.3.0 is about a connection lifecycle that lies less. The skill now distinguishes being configured, completing OAuth, passing an MCP probe, and having tools actually projected into the client, because those are four different states and only the last one means you can do anything. It documents the OpenClaw sequence of probe, then /new or /reset, then list_pets before claiming readiness. It accepts a bare code, a code&state=... tail, or a whole localhost callback URL pasted privately, and parses only the code out. And it has separate recovery paths for an expired code, insufficient scope, a failed probe, and a stale session, instead of one shrug that says try again.
The App Side
Meo Mai Moi v1.19.7 ships the one change the connector was waiting on. ask_placement_question went out in v0.2.0 with a documented known limitation, because signed-in users were still getting a proof-of-work challenge when asking a question on a listing, and an agent cannot solve one on your behalf. Signed-in users no longer get that challenge. The guard applies to anonymous askers, where it belongs.
The Developer page also has an MCP section now: the gateway endpoint, the connection steps, and a copyable quick-start prompt you can paste into an agent client. It hides itself when no gateway is configured. Before this, the honest answer to “how do I connect an agent” was a link to a blog post, which is not documentation.
The endpoint, in case you want it here:
https://mcp.meo-mai-moi.com/mcp
The API Is Still the API
None of this deprecates anything. The REST API and personal API tokens are still fully supported, still documented, and still the right choice when you are writing a script rather than connecting an assistant. The two are separate authorization models on purpose: a token you create and hold, or an OAuth grant with named scopes that you can revoke.
v1.19.6 fixed a real problem there, too. API tokens can now be minted with any of the 26 scopes the routes actually name, instead of falling back to a single blanket ability. And the admin panel can see which API keys were issued through MCP, which matters when you are trying to work out who is calling what.
What is gone is the ChatGPT connector, which we retired last month. One door for agents, several ways in.
Also in v1.19.7
The page language attribute now follows the active language instead of staying English for the whole session, so screen readers and browser translation get the right locale. Guest locale detection got more accurate: Accept-Language keeps the highest quality value for a repeated tag, understands uk_UA style subtags, and runs early enough that the SPA shell and link previews honour it. New accounts have their locale seeded at registration.
Approximate pet ages now read with a tilde, so a guess is not mistaken for a birthday. That one is my favourite kind of fix. For a street rescue, nobody knows the birthday, and printing an estimate as a fact makes the record quietly wrong forever.
The placement request timeline also stacks vertically on narrow screens instead of squeezing four steps into a row, and the permissions admin gained select all and clear all.
Agents are getting better at pet care in the sense that matters least, which is talking about it. The work is in giving them a narrow, honest door and making sure the app on the other side still checks every rule.