# Connecting chat apps with MCP

agh runs a remote MCP server at `https://app.assetgoeshere.com/mcp`. A chat app that connects to it can claim requests, make the files with you, and deliver them for review, all inside the chat. Developers can also approve batches, review deliveries and publish from the chat. Each person signs in with their own agh account, so the app can only do what their project role allows.

## Tools

| Tool | What it does |
| --- | --- |
| `list_projects` | The projects you belong to. |
| `whats_new` | What agh added lately, as on the web app's What's new page: only what this agent hasn't seen, or every entry with `all`. Signed in, like the other tools. |
| `list_assets` | Requests as short summaries, a page at a time: up to `limit` (50 unless set, at most 200), newest first or `order: oldest`, and a `nextCursor` to pass back as `cursor` for the next page; `get_asset` has the full brief, spec, notes and review note. |
| `claim_next_request` | Claim the oldest open request that matches, for two hours, or up to 30 days with `holdHours`. |
| `claim_request`, `release_claim` | Claim one request by its exact id or renew your claim; give a claim back after a failed attempt. |
| `deliver_file` | Deliver a file from a ChatGPT chat, such as an image ChatGPT made or one you uploaded. ChatGPT passes a short-lived link to its own file storage. |
| `start_upload`, `deliver_upload` | Deliver a file on your own machine, such as a PNG Codex generated: upload it to the one-hour link, then deliver it. A Roblox model can bring a picture of itself: upload it with `preview` true and pass its id as `previewUploadId`. With `attachment` (the file's name), it uploads a file to post with a message instead. |
| `deliver_text` | Deliver text the model wrote, such as strings or flavor text, or an SVG's markup (checked and saved as `image/svg+xml`). Other images and audio go through the upload tools. |
| `set_placeholder` | Attach the placeholder the game uses until a request is fulfilled: a stand-in agh makes, the file at its path in the repository, or an upload. `request_assets` takes one per request too. See `agh guide placeholders`. |
| `get_reference` | A one-hour download link for a reference file a request's notes name, from agh or the project's repository. |
| `request_assets`, `submit_batch` | For agents: request assets and send them for approval. |
| `request_revision` | Ask for a new version of an asset that already has a file. |
| `cancel_request` | Cancel a request you made that nobody has claimed yet, before or after approval, with an optional note. Developers can cancel any request nobody holds. |
| `post_asset_message` | Write in an asset's conversation. With `question` true, the request is on hold until someone answers. `attachments` posts up to five files with it, each uploaded with `start_upload` and `attachment`. |
| `remove_attachment` | Remove a file you posted in a conversation, or any as an admin. The message stays. |
| `get_inbox` | What waits for you: batches to approve, open requests, your claims, deliveries to review, assets to publish or waiting to merge. |
| `send_feedback` | Send a bug report or feedback about agh to the people who run it. Models are asked to use it when an agh tool fails or misleads them, and to tell you when they do. |

For developers and admins:

| Tool | What it does |
| --- | --- |
| `list_batches`, `get_batch` | Batches waiting for approval (`status` submitted), and the requests in one. |
| `review_batch` | Approve or reject a batch, or approve only some requests (`assetIds`); the rest go back to the author with the note. |
| `get_file_link` | A one-hour download link for a delivery waiting for review (`which` pending), the current file, an earlier rejected attempt, or a translation's source (`which` source). With `attachment`, a file posted in the conversation. |
| `get_strings` | Beta. A text or strings file line by line, and a translation beside its source with its flags: missing keys, placeholders that differ, lines over `max_length`. See `agh guide translations`. |
| `review_delivery` | `accept` (optionally correcting `provenance` and `madeBy`), `reject` with a note and a `reason` (`misses-brief`, or `changes-brief` with the new brief), or `unaccept` an acceptance that isn't in a pull request yet. |
| `find_free_assets` | Search openly licensed sounds and images that allow commercial use (CC0, Public Domain Mark, CC BY, CC BY-SA) for a request (`id`) or by `media` and `query`. Every plan, with a daily allowance. |
| `use_free_asset` | Fill an image or audio request with a found item, recording its source and license. An agent suggests one for its own request before approval; `remove` takes it off. |
| `scale_to_spec` | Scale a delivered image waiting for review down to its `size` spec, keeping a `crop` of the spec's shape or the centre; the original stays in its history. `undo` puts it back. Studio and Enterprise plans. |
| `make_variants` | Make smaller copies of an accepted image, or one waiting for review: `variants`, each with a `name`, `format` (webp, jpeg or png), `longestEdge`, `quality` and, for JPEG, a `background`. Each copy is an accepted asset in a set with the image. `remake` true remakes out-of-date variants, or the ones in `names`. Studio and Enterprise plans. |
| `reduce_model` | Reduce a delivered `.glb`, `.gltf`, `.fbx` or `.obj` model waiting for review to a triangle `target`, or its `triangles` spec. Blender runs in the background; the reduced model then replaces the delivery and the original stays in its history. `undo` puts it back. |
| `render_from_model` | Render an accepted model to an open PNG image request: a single icon, or a sprite sheet of 4 or 8 directions by frames of an animation clip. The render is delivered to the request and waits for review. Studio and Enterprise plans. |
| `plan_video` | Show or set a narrated video request's scenes: for each line of its narration, a Library image or a title card, with its own motion and transition. |
| `render_video` | Render a narrated video from its scenes. The MP4 is delivered to the request and waits for review. Studio and Enterprise plans. |
| `set_provenance` | Correct how an asset's file was made (`provenance`, `madeBy`), as `agh mark --provenance` does; for adopted files once you know. |
| `change_brief` | Change an approved request's brief, spec or notes, with the reason; the old brief is kept. |
| `publish` | Send accepted assets, or only `assetIds`, to the repository as one pull request. They're `proposed` until it merges. |
| `check_publishing` | Check that pull request: what still waits, what merged and what was closed without merging. |
| `scan_repository`, `adopt_files` | List the image and audio files already in the repository, and adopt ones agh doesn't track as published assets. Provenance stays `unknown` unless you say. |
| `scan_roblox_references`, `adopt_roblox_assets` | Find the Roblox asset ids the repository uses, and adopt assets already on Roblox by id: agh downloads each and keeps its Roblox id. |

The file must match the request's file type: a `.png` request needs a PNG. The app asks before delivering, approving, accepting or publishing, and you can say no.

If something in agh goes wrong or gets in your way, ask the chat app to "send agh feedback about it", or report it yourself with `agh feedback send`. The people who build agh read every report.

Delivering needs your claim, or a request nobody else holds. A claim of yours that expired still delivers until someone else claims the request. Specs are advisory: for images, agh measures the size and alpha, and for audio the sample rate, bit depth, channels, integrated loudness and true peak when the spec asks for them, and lists any differences from the spec as `specWarnings` for the reviewer, without refusing the file.

## What you need

- An agh account in the project, with a role that can deliver: `artist`, `developer` or `admin` (or `agent` to request). Approving, reviewing and publishing need `developer` or `admin`. A project admin invites you; nothing else is needed from them.

The chat app registers itself with agh, so there is no client ID or secret to enter.

## ChatGPT

ChatGPT connects to MCP servers as apps, which plugins can include.

1. In ChatGPT, open **Settings → Apps** (turn on developer mode under **Advanced** if creating an app is not offered).
2. Create an app. Name it "Asset Goes Here" and set the MCP server URL to `https://app.assetgoeshere.com/mcp`.
3. Choose **OAuth** for authentication and leave the client ID and secret empty. ChatGPT registers itself.
4. Save, then sign in with your agh email and password when ChatGPT asks.
5. In a chat, ask for something like "claim the next card art request in agh and make it". When you're happy with the image, say "deliver it".

A workspace admin can add the app to a plugin so others don't repeat these steps.

## Claude

1. In Claude, open **Settings → Connectors → Add custom connector**.
2. Enter the URL `https://app.assetgoeshere.com/mcp`. Leave **Advanced settings** empty.
3. Connect, and sign in with your agh account.

Claude can deliver text, and SVG images it writes as markup, with `deliver_text`. To deliver other images it needs a file link from the chat, so for images use ChatGPT, `agh openai`, or the web page.

## Other MCP clients

Any client that supports remote MCP servers with OAuth can connect. It finds the sign-in server through `https://app.assetgoeshere.com/.well-known/oauth-protected-resource/mcp`. It registers itself at `https://app.assetgoeshere.com/oauth/register`, which accepts ChatGPT's and Claude's callbacks and any loopback callback (`http://127.0.0.1:<port>/…` or `http://localhost:<port>/…`), which desktop clients such as Codex use. For a client with some other callback, whoever deploys agh adds it to `mcpCallbackUrls` in its stage settings. Coding agents with a shell, such as Codex, can also use the CLI instead (`agh guide codex`).
