Design agreed in discussion, nothing built yet. Records the agent's role, its scopes and MCP servers, its A2A surface, and the framework choice with its reason — so the next session starts from the decisions rather than re-deriving them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2.1 KiB
Catalogue — product management agent
Framework: PydanticAI + FastA2A · Mode: conversational · Client id: classic-models-agent-catalogue
Serves the product manager: create and update products and product lines, set prices, decide what to discontinue.
Scopes and MCP servers
| MCP | catalog (mcp-catalog-audience), sales (mcp-sales-audience) |
| Scopes | catalog:read, catalog:write, sales:read |
sales:read is there to answer "does this product actually sell?" before a
pricing or discontinuation decision. Read only — this agent never touches orders.
A2A
Calls — Approvisionnement.check_availability, to know remaining stock and
open orders before discontinuing a reference.
Exposes — nothing yet. Add skills only when another agent needs them.
Why PydanticAI here
Not arbitrary. This is the agent that writes structured data under constraints — prices, quantities, references, product line membership. Typed validation of the model's output earns its place here in a way it would not on a purely conversational agent.
FastA2A, not to_a2a()
Use FastA2A directly. Agent.to_a2a() still works in PydanticAI 1.x but emits
a deprecation warning and is removed in v2.
FastA2A is framework-agnostic, so whatever is built here is also the natural
basis for the A2A adapter in front of the n8n agents — see
classic-models-agent-flows.
Before writing code
Read classic-models-agent-platform/CLAUDE.md first. It holds the identity
model, the MCP and LLM endpoints, the token-exchange recipe and the known
blockers. This file only covers what is specific to this agent.
Non-negotiables
- Inference goes through the Kong AI gateway,
https://llm-dev.sttlab.local/llm/v1/chat/completions. Calling a provider directly bypasses the rate limits and prompt guards. - One MCP client per conversation turn, built with freshly exchanged tokens. Do not hold a long-lived MCP connection with a fixed token.
- A2A calls return answers, not data. Expose narrow decision-shaped skills,
never a generic
query. - Deliverables in English.