Get started
All recipes

An agency site that keeps itself current

Mark what belongs on your portfolio, and let the agent that builds the site ask what changed - including what came down.

An agency running several client projects from one workspace.25 minutes
list_site_entriesget_site_updatesget_site_cardlist_products

The situation

You run an agency. Its site has a portfolio, a blog, a changelog, documentation for the projects that have no docs of their own, and the legal pages. The projects it writes about already live in makermap, and the site itself is built by an agent with your MCP connected.

The work is not writing the site. It is keeping it TRUE - and the half that rots is not additions. A project you took off the portfolio stays on the site forever unless something tells the agent to remove the page, and nothing about that looks broken from either end.

1. The site is an ordinary product

Create the agency site as a product like any other. It has tasks, decisions and releases of its own, so there is no separate "site" entity to learn.

2. Mark what belongs there

On a product page, use On the site in the right-hand rail: pick the site, and the product goes into its portfolio section until you take it off.

Placing and removing have no tool at all, on purpose. Deciding what the world sees is not a decision to hand to an agent that is also writing the thing being shown - and that single rule is why there is no approval step anywhere in this. The mark IS the approval.

3. Write the showcase text

Create a document with the slug portfolio-card inside each product. That is what a visitor reads.

It is deliberately not the product's internal summary. That field answers "why are we building this" for your team; on a public page it reads as marketing while saying something you never meant to publish. When it is missing, get_site_card says so in missing and puts nothing in its place.

4. Give the site agent one instruction

Every morning, call get_site_updates for the agency site with the cursor you stored last time. For each update: placed or changed means rebuild that page from get_site_card; removed means delete the page and drop it from the index. Store the new cursor. Dedupe by id - delivery is at-least-once.

A full rebuild - a new deploy, a theme change - is list_site_entries, which returns everything on the site by section.

What this buys you

The site stops being a thing somebody remembers to update. A project marked in the morning is on the portfolio by the next run; a project withdrawn is off it. Nothing is published by makermap itself - it records what you chose to show and answers questions about it. Your agent, your token, your renderer.

Scopes

site:read for all three tools. The agent additionally needs the scopes for whatever it reads through other tools - documents:read for a blog post, say. site:write exists only for the placement routes, which refuse agents regardless.