Artur Pososhko

Build · Circlewise 2026

From spreadsheet exports to questions Claude answers from live data.

A read-only Claude connector for an affiliate network’s data. Discovery in 22 recorded calls, a plan on 18 Aug 2026, live 11 days later, measured from the first session.

Client
Circlewise, an affiliate network
Timeline
Discovery 26 May to 13 Aug · plan 18 Aug · live 29 Aug · team rollout 31 Aug 2026
My part
Discovery, plan, build, deploy, rollout, measurement
Stack
Python MCP server, Docker, SQLite, company sign-in

The build, measured.

Source under each value

  • 11 days plan to production, 18 → 29 Aug 2026; 2 more days to the whole team Source: project context doc, s3 + s15
  • 28 / 10 tools built / released to the team, 30 Aug 2026 Source: project context doc, s6 + s16
  • 599 automated tests at rollout; 610 the next day Source: test runs
  • 415 · 93% data pulls by the team in 7 weeks; answered without an error Source: audit log
  • 50 of 50 nightly refreshes completed Source: audit log
  • €0 new licence cost: free-tier sign-in, the client’s existing server Source: project context doc, s10 + s15

01 · Discovery

22 recorded calls before any code.

Between 26 May and 13 Aug 2026 I recorded 22 calls with 6 people, from the CEO to the account managers. I also watched the work done live, with a timer running.

That produced a problem map of 11 clusters and 25 as-is workflows. I ranked 9 tooling ideas by impact over effort, with the team’s own wishes weighted up. A Claude connector to the affiliate platform’s data ranked first.

“that would be a game changer… we wouldn’t need those conversations”

An account manager, on the proposal, 13 Aug 2026

02 · Plan

One decision record. 33 verified use cases.

On 18 Aug an architecture decision record set the shape. A Claude research session wrote it for me, and I adopted it.

A small Python MCP server in Docker on the client’s existing server. Company sign-in in front of it. The platform’s API key held on the server. A nightly SQLite copy for the heavy questions, live reads for the rest. The use cases went from 43 candidates to 33 verified ones.

How the read-only Claude connector is built Claude (claude.ai or Claude Code) calls a small server on the client’s existing server. Two gates in fixed order: company sign-in with a verified email domain, otherwise 401; then a role gate that decides which tools you see. Behind the gates, a question goes either to the nightly SQLite copy or to a live read, GET only, to 2 allowlisted endpoints of the affiliate platform. The vendor key is held server-side. The connector never writes; every call is logged with the business question, and logs are kept 12 months, enforced by the server. The client’s existing server · Docker Claude claude.ai or Claude Code 1 · Company sign-in verified email domain, otherwise 401 2 · Role gate decides which tools you see Nightly copy SQLite, read-only SQL for heavy questions Live read GET only, to 2 allowlisted endpoints The affiliate platform its API Vendor key held server-side
  1. Claudeclaude.ai or Claude Code
  2. The client’s existing server · Docker

    1. 1 · Company sign-inverified email domain, otherwise 401
    2. 2 · Role gatedecides which tools you see
    3. Nightly copySQLite, read-only SQLLive readGET only, 2 allowlisted endpoints

    Vendor key held server-side

  3. The affiliate platformits API
Architecture, sanitised: two gates in a fixed order, then a nightly copy or a live read. It never writes, and logs are kept 12 months, enforced by the server.

03 · Build

8 tools on day one. 28 at rollout.

  • 8 / 44 tools / tests on the first day of the build Source: project context doc
  • 28 / 599 tools / tests at rollout Source: test runs
  • 4 adversarial review passes Source: project context doc
  • 30 + 193 calls in 2 wire-level product tests Source: test runs

I build by directing Claude Code, so the quality bar is written down: every change in behaviour lands with a test that failed first.

One overnight agent build ran under written directives. In about 3.5 hours it took the server from 8 to 21 tools and from 77 to 294 tests.

On 19 Aug, the day after the first build, I used it for a real analyst session and filed 10 issues against it, 4 of them High.

04 · Deploy

The gate went live before the data.

29 Aug. The service booted empty, in sign-in mode. Before any data landed, I proved on real requests that callers without access were refused.

Before that, a read-only audit of the shared host found its reverse proxy close to its process limit, with about 18,700 zombie processes. I fixed it without interrupting the other workloads on the same server.

Read-only by construction: GET requests only, to 2 allowlisted endpoints, and every SQL query checked by the database’s own authoriser. 7 redeploys in the first 4 days, at least 5 of them with a recorded health and sign-in check.

05 · Rollout

10 of 28 tools, each tied to a real question.

31 Aug: an email to the team with a 2-page guide, then a demo on the team call. The guide covered what to ask, how to connect in 2 minutes, what gets logged and why, and the 12-month retention the server enforces.

I released 10 of the 28 tools. Each one answered a question the pilot user had asked or one from the demo. The other 18 stayed in reserve.

The claude.ai connectors list, cropped to the one row that matters: the Circlewise connector, type Web, marked Custom, authorised for the individual, connected.
Connecting from claude.ai: the connector in the list, cropped to its row
The Add custom connector dialog in claude.ai, with the name Circlewise and a placeholder address, mcp.example.com.
Adding the connector; the address is replaced in this image

Team guide

2-page team guide: what to ask, how to connect in 2 minutes, what gets logged and why

06 · Measure

Every call logs the question behind it.

Every call records the business question and the sequence of tools used. On day 2, one session filled in the optional question field on 0 of 32 calls. I made the field required and deployed the change the same evening.

The first tool built from that telemetry shipped the same day as the first real session.

The first run on real data surfaced two findings. Ended offers were inflating every year-over-year comparison by about a third of one portfolio. And about a sixth of network payout was invisible to views ranked by amount.

  • 415 data pulls in 69 conversations, first 7 weeks Source: audit log
  • 93% answered without an error Source: audit log
  • 50 of 50 nightly refreshes completed Source: audit log
  • 56% of pulls were custom questions through the read-only SQL route Source: audit log

After 4 weeks: 205 pulls, 94% answered on the first try. After 7 weeks, 5 teammates had got answers from it.

07 · What didn’t work

Where it fell short.

  • The in-chat widget, the feature my research had ranked highest, was opened 0 times in 7 weeks. The pilot user worked in Claude Code, where it never renders.
  • The call tools added in October never succeeded: 3 attempts by 3 people, and nobody had enrolled.
  • Weekly users were 3 to 4, and by late October 2 people used it every week.
  • Time saved was never measured.
  • Sign-in still runs on the auth provider’s staging environment.

08 · Next

Proposed for Q4 2026. Not delivered.

  • Copy the datasets the team asks about onto the client’s server, so questions about the past stop waiting on the live API. Live answers had a median of 15 seconds and a worst case of over 9 minutes.
  • A step-by-step Claude course built on the team’s real work, and 2 workshops.

Your build

Same loop, your data.

Discovery, a plan, a fixed-scope build, then a measurement. A 30-minute call is enough to tell whether it fits.

Book a 30-minute call