By Sagar Shankaran, Founder of CallSphere
A step-by-step engineer's walkthrough to build a Claude Cowork plugin for finance close: MCP connectors, skills, sub-agents, schemas, and a safe test plan.
Key takeaways
You've read the architecture overview and now you have to actually build the thing. This is the hands-on version: a single engineer sitting down to ship a Claude Cowork plugin that helps a finance team run month-end close, with real file layouts, real connector code, and a real test plan. We'll build a plugin called finance-close that fetches trial balances, reconciles two entities, flags variances, and drafts a close summary — and we'll do it in a way that a controller can trust on day one.
Everything starts with structure. A Cowork plugin is a folder Claude can read, and a sensible layout keeps skills, connectors, and sub-agents separated so each can evolve independently.
finance-close/
plugin.json # manifest: name, version, what it bundles
skills/
month-end-close/
SKILL.md # the close procedure
materiality.md # variance thresholds, cited
connectors/
warehouse.json # MCP server config (read-only role)
erp.json # MCP server config (approval-gated writes)
agents/
reconciler.md # sub-agent: conservative, cites every number
The manifest ties it together. Keep it minimal — name the bundle and point at its parts. The agent discovers the rest by reading the folder.
The first capability is data access, and the safest first tool is read-only SQL against your warehouse. Define the MCP server with a role that physically cannot mutate data, then expose a tightly typed tool. Below is a connector config plus the tool the agent will call.
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
// connectors/warehouse.json
{
"name": "warehouse",
"command": "npx",
"args": ["-y", "@yourco/mcp-snowflake"],
"env": { "SNOWFLAKE_ROLE": "FINANCE_READONLY" },
"tools": [{
"name": "get_trial_balance",
"description": "Trial balance rows for an entity and period.",
"input_schema": {
"type": "object",
"properties": {
"entity_id": { "type": "string" },
"period": { "type": "string", "pattern": "^[0-9]{4}-[0-9]{2}$" }
},
"required": ["entity_id", "period"]
}
}]
}
The FINANCE_READONLY role is doing real work: even if the agent is somehow coaxed into trying to write, the database rejects it. Defense lives in the system, not just the prompt.
Now teach the agent your process. The skill's SKILL.md is plain instructions Claude loads only when a close is in play. Write it as you'd write a runbook for a new analyst — numbered, specific, and pointing at your own thresholds file.
# Month-End Close
When asked to close a period:
1. For each entity in scope, call get_trial_balance(entity, period).
2. Compare each account to the prior period.
3. Flag any variance above the threshold in materiality.md.
4. For flagged accounts, draft a one-line explanation and cite the rows.
5. Produce a close summary table; do NOT post entries without approval.
Notice step 5 — the skill itself reinforces the guardrail. The agent reads this only during close work, so it never bloats unrelated requests. The flow from request to reviewed output looks like this.
flowchart TD
A["'Close May for US & UK'"] --> B["Load month-end-close skill"]
B --> C["Spawn reconciler sub-agent per entity"]
C --> D["get_trial_balance via warehouse connector"]
D --> E{"Variance > threshold?"}
E -->|No| F["Mark account clean"]
E -->|Yes| G["Draft explanation + cite rows"]
F --> H["Merge into close summary"]
G --> H
H --> I["Return summary + transcript for review"]
The reconciler.md sub-agent is where you set tone and rigor. Configure it to be conservative, to refuse to invent figures, and to cite the exact rows behind every number. Because each entity gets its own sub-agent instance, the UK close runs in a context window untouched by the US close, which is what keeps multi-entity runs from blurring together.
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
| Decision | Choose this | Why |
|---|---|---|
| Data access | Read-only role first | Eliminates accidental writes |
| Procedure | Skill, not system prompt | Loads only when relevant |
| Multi-entity | One sub-agent each | Context isolation |
| Writes (journals) | Approval gate | Human stays in the loop |
get_trial_balance over an open run_sql; it narrows the surface and makes outputs predictable.finance-close directory with the layout above.get_trial_balance tool.SKILL.md and materiality.md with your real procedure and thresholds.reconciler sub-agent with conservative, cite-everything instructions.Mostly configuration plus prose. The connectors may be off-the-shelf MCP servers; the skill and sub-agent are written in plain instructions. The engineering effort is in schemas, roles, and testing — not building a model.
For a single warehouse connector and a one-entity close, an engineer can have a working backtest in a day or two. Multi-entity and ERP writes add time mostly in access control and review, not in the agent itself.
That's the point of backtesting — trace the wrong figure through the transcript, find whether it was a bad tool result or a skill-step gap, and tighten that step. Wrong answers in a known period are cheap; wrong answers in a live close are not.
The same pattern you just built — connectors, skills, and isolated sub-agents — is exactly how CallSphere runs agentic voice and chat: assistants that answer every call, fetch records mid-conversation, and book work 24/7. See it in action at callsphere.ai.
Source & attribution: This is an independent, original explainer inspired by Anthropic's coverage on the Claude blog. Claude, Claude Code, Claude Cowork, Claude Opus, and the Model Context Protocol are products and trademarks of Anthropic. CallSphere is not affiliated with or endorsed by Anthropic.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
The monthly IEEE 1366 reliability close takes 64 hours across three people. What goal-driven agents change, the arithmetic, and what stays with the engineer.
Payment matching, NSF reversals, state-specific notices and the three-way trust tie-out, run overnight so property managers start the 6th with exceptions only.
How pest control service managers hand the monthly food-account trend packet to a 2026 work agent as a goal - and what has to change about assigning work.
The phased plan, insurance estimate, predetermination narrative and financing page, finished before the patient leaves. What the owner has to change to get it.
Why co-pack quotes take six days, and how 2026 agents that return finished work rebuild the packet — costed formula, freight, spec sheet — in two hours.
A 1/1 commercial submission packet costs an account manager nine hours, eight of them gathering. In 2026 you hand over the goal and review the finished packet.
© 2026 CallSphere Inc. All rights reserved.
Made within San Francisco
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI