Meaningful scale for a desktop utility over one year.
Static HTML Export
TalkToFigma Desktop GA4 Analysis
The data shows a desktop product that did more than launch. Users connected it, ran real Figma MCP tool calls, and exposed a clear product lesson: the core value was reducing anxiety between first launch and first connection.
Presentation-Ready Metrics
These are the safest top-line numbers to use in a retrospective. Total events are included for telemetry scale, but the interpretation should stay cautious because exception volume is large.
Strongest evidence of actual workflow usage.
Among MCP calls with explicit success or failure values.
Includes '(not set)', so use as spread evidence carefully.
| Metric | Value | Interpretation |
|---|---|---|
| Active users | 31,360 | Meaningful one-year scale for a desktop utility. |
| Sessions | 24,429 | Evidence of repeated use, while desktop telemetry may understate web-style sessions. |
| Total events | 1,826,813 | Telemetry scale, not a pure success metric because exceptions inflate the count. |
| MCP tool calls | 570,373 | Best evidence of workflow usage beyond simply launching the app. |
| Successful MCP calls | 536,267 | About 94.1% success among explicit success or failure outcomes. |
| Country values | 165 | Includes '(not set)', so treat as global spread evidence rather than exact countries. |
| Top country | South Korea, 4,263 active users | Largest active-user country in the snapshot. |
| Desktop share | 100% desktop | This dataset describes desktop-app telemetry, not a web funnel. |
Narrative
One-line takeaway: In the end, the core value was not adding more features. It was reducing the anxiety between first launch and first connection.
This project was less about adding one more feature to Figma and more about creating an installable desktop path into the Figma MCP workflow. The app reached 31,360 active users and recorded 570,373 MCP tool-call events. Among calls with explicit success or failure values, 536,267 succeeded and 33,777 failed.
The top MCP actions look like real design-editing work: creating text, setting fill colors, creating frames, adjusting corner radius, editing text content, creating rectangles, inspecting nodes, and exporting images. That supports the claim that users did not merely open the app. They used it to perform actual work through MCP.
The retrospective should not frame the project as a failure. A better frame is that the project proved a need, then the need moved toward larger platform surfaces such as official Figma MCP and Canvas-style agents. The hard part is accepting that a working independent tool can become lower-priority precisely because the core direction was validated.
Growth And Usage Depth
| Month | Active users | Sessions | Events |
|---|---|---|---|
| 2025-08 | 243 | 185 | 1,502 |
| 2025-09 | 311 | 195 | 2,037 |
| 2025-10 | 474 | 292 | 4,366 |
| 2025-11 | 1,150 | 660 | 8,351 |
| 2025-12 | 3,323 | 1,981 | 14,398 |
| 2026-01 | 7,890 | 4,697 | 44,976 |
| 2026-02 | 5,410 | 3,429 | 107,221 |
| 2026-03 | 6,084 | 4,738 | 826,851 |
| 2026-04 | 3,153 | 3,261 | 311,206 |
| 2026-05 | 2,602 | 2,636 | 211,318 |
| 2026-06 | 2,505 | 2,576 | 294,587 |
MCP Work Happened
The tool-call distribution is the strongest evidence that the app enabled real Figma workflows rather than only app starts or page views.
| MCP tool | Successful events | Active users |
|---|---|---|
| create_text | 105,643 | 613 |
| set_fill_color | 92,561 | 604 |
| create_frame | 52,509 | 613 |
| set_corner_radius | 38,053 | 504 |
| set_text_content | 37,845 | 455 |
| create_rectangle | 34,779 | 473 |
| get_node_info | 32,736 | 842 |
| move_node | 13,859 | 324 |
| export_node_as_image | 13,536 | 455 |
| set_stroke_color | 10,910 | 361 |
Global Reach And Platform Shape
GA4 recorded 165 country values and 37 language values. Because country includes '(not set)', the safer claim is broad global spread rather than an exact country count.
Country Table
| Country | Active users | Sessions | Events |
|---|---|---|---|
| South Korea | 4,263 | 5,599 | 1,143,307 |
| Russia | 3,133 | 1,969 | 132,773 |
| India | 2,774 | 1,839 | 25,859 |
| United States | 2,047 | 1,580 | 132,057 |
| Nigeria | 1,824 | 1,095 | 9,811 |
| Japan | 801 | 565 | 5,070 |
| Indonesia | 591 | 369 | 3,678 |
| Brazil | 565 | 405 | 12,648 |
| Singapore | 564 | 461 | 77,761 |
Language Table
| Language | Active users | Sessions | Events |
|---|---|---|---|
| English | 18,875 | 15,497 | 1,485,167 |
| Russian | 4,094 | 2,489 | 21,686 |
| Korean | 2,766 | 2,759 | 264,062 |
| French | 1,209 | 744 | 5,224 |
| Chinese | 990 | 620 | 31,502 |
First Launch And First Connection
This should be the center of the retrospective. The app's value was not only 'let AI control Figma'. It made the connection server visible, recoverable, and understandable.
| Event or action | Active users | Events |
|---|---|---|
| app_start | 30,912 | 40,514 |
| start_websocket_server | 21,115 | 23,898 |
| direct_oauth_start | 3,016 | 4,382 |
| copy_mcp_config | 1,495 | 2,448 |
| report_issue | 99 | 133 |
| Direct OAuth completed | 1,620 | 2,124 |
| kill_all_servers | 540 | 1,017 |
Operational Burden
The app worked, but it also behaved like a real desktop product with a broad failure surface: port conflicts, server restarts, OAuth, WebSocket state, logs, and network issues.
| Error message | Events | Active users |
|---|---|---|
| write EPIPE | 897,378 | 12 |
| net::ERR_TUNNEL_CONNECTION_FAILED | 99,996 | 1 |
| write EIO | 56,708 | 1 |
| EPIPE: broken pipe, write | 20,036 | 1 |
| Attempted to register a second handler for 'server:start' | 2,605 | 1,231 |
| Address already in use: bind | 1,539 | 1,539 |
| Address already in use | 756 | 552 |
| Timed out waiting for 30000 ms | 650 | 102 |
| Not connected to Figma | 334 | 32 |
| Must join a channel before sending commands | 268 | 148 |
A key caveat: write EPIPE produced 897,378 events from only 12 active users. The operational story should therefore combine raw volume with affected user count.
KPT Candidates
Keep
- Focused on reducing anxiety from first launch to first connection.
- Turned the Figma MCP workflow into an installable desktop experience.
- Instrumented enough analytics to verify usage scale, geography, OS distribution, MCP success, onboarding behavior, and operational burden.
- Built a product, not just a test environment.
Problem
- Once the core capability is absorbed by official platform features, maintaining the same update intensity becomes hard to justify.
- Exception events accumulated heavily and made some event-count metrics hard to interpret.
- Connection, port, server state, OAuth, and logs became a larger product surface than expected.
Try / Learning
- Define the user context that platforms are less likely to absorb, not only the feature.
- Separate first successful connection, reconnection, config copy, success, failure, and diagnostic actions more rigorously.
- Track affected active users alongside raw error-event counts.
- Decide future major updates by combining usage, platform absorption risk, operational burden, and personal sustainability.
Source Details And Caveats
This export is a standalone static HTML artifact. It does not include the MCP app shell, interactive top bar, refresh controls, export controls, or app-only navigation.
| Field | Value |
|---|---|
| Original artifact URL | https://mcp-server-dataanalyticswidgets-d90d6b74b2c37858.web-sandbox.oaiusercontent.com/?app=skybridge |
| Artifact generated at | 2026-07-01T00:00:00+09:00 |
| Static export file | talk-to-figma-desktop-ga4-static-report.html |
| GA4 source | GA4 Analytics MCP |
| Property | Figma MCP Agent / properties/499789310 |
| Requested range | 2025-07-01 to 2026-06-30 |
| Observed effective range | 2025-08 to 2026-06 |
| Timezone | Asia/Seoul |
| Local source snapshots | docs/analytics/ga4/talk-to-figma-desktop-ga4-analysis.en.md, data/ga4/talk-to-figma-desktop-ga4-raw-data.json, data/ga4/talk-to-figma-desktop-ga4-raw-data.csv, data/ga4/talk-to-figma-desktop-ga4-raw-data.md |
- Country row_count is 165, but this JSON stores the top rows used in the analysis snapshot. See the Markdown file for more displayed country rows.
- Region and city reports were dominated by '(not set)' values and are not reliable for fine-grained location claims.
- Browser, customEvent:platform, and customEvent:os_info are mostly '(not set)' and should not be used as strong segmentation evidence.
- Exception event counts are inflated by repeated messages from very small numbers of users, especially write EPIPE.
- GA4 funnel report semantics are directional and ordered; funnel counts do not equal broad event totals.
- Total event count includes 1,081,199
app_exceptionevents, so it should not be used as a pure usage metric. - GA4 funnel numbers are ordered funnel results and should not be directly compared with broad event totals.
averageSessionDurationlooks unusually high in this desktop telemetry context and is intentionally not used as a primary claim.