Skip to content

Commit 188274e

Browse files
committed
docs: Add SharePoint-lists demo GIF via erpl-web extension
- flapi-demo-sharepoint.gif: live Microsoft 365 SharePoint list attached as a DuckDB catalog (erpl_web, ATTACH ... TYPE sharepoint_lists), served as an MCP tool, analyzed by Claude Code — all real, credentials only via {{env.*}} references - demo-projects/sharepoint/: reproducible config tree (no secrets) - Playbook §6: add the Microsoft 365/SharePoint wedge alongside SAP - assets/README.md: recording notes incl. seeded tracker rows and the Number >= 10 filter that hides erpl-web CI fixture rows
1 parent 2f021b8 commit 188274e

8 files changed

Lines changed: 110 additions & 6 deletions

File tree

docs/PROMOTION_STRATEGY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ is pitching them a SQL-to-API+MCP tool:
127127
- **Locally Optimistic / dbt Slack / Data Twitter(X)** — the analytics-engineering crowd. Frame: "let analysts ship read-only APIs without begging a backend team."
128128
- **MotherDuck / DuckDB office hours & meetups** — lightning-talk or demo slot. This community *is* your ICP.
129129
- **ERPL / SAP-on-DuckDB niche** — flAPI can expose **SAP ERP & BW** via ERPL. Almost nobody offers "SAP data as a governed REST/MCP API from a YAML file." SAP developer communities (SAP Community, r/SAP, SAP-focused Discords/LinkedIn groups) are an untapped, high-value, low-competition audience. This is arguably flAPI's most differentiated single wedge.
130+
- **Microsoft 365 / SharePoint niche** — via the [erpl-web](https://github.com/DataZooDE/erpl-web) DuckDB extension, flAPI serves **SharePoint lists** (plus Entra ID, Teams, Business Central, Dataverse) as REST + MCP tools — working demo recorded (`docs/promotion/assets/flapi-demo-sharepoint.gif`). "Your team's SharePoint list as an AI tool, no Power Platform needed" is untapped: r/Office365, r/sharepoint, Microsoft Tech Community, M365 admin Discords. Same low-competition logic as the SAP wedge.
130131
- **LLM tooling Discords** (Claude/Anthropic dev community, Cursor, LangChain, LlamaIndex) — wherever people wire up MCP servers, "expose your warehouse as governed MCP tools" is on-topic.
131132
- **AI engineering newsletters** (Latent Space, tldr.ai, Ben's Bites, Data Engineering Weekly) — pitch the MCP-governance angle; these curate tools weekly and are hungry for concrete demos.
132133

docs/promotion/TRACKER.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ copy-paste material lives in [SUBMISSION_KIT.md](SUBMISSION_KIT.md) and
1717
- [x] Fix wheel license metadata (Apache-2.0 → BUSL-1.1) — [PR #99](https://github.com/DataZooDE/flapi/pull/99), closes #97 (needs a patch release to land on PyPI)
1818
- [x] Add `mcp-name: io.github.datazoode/flapi` marker to PyPI README — included in PR #99
1919
- [x] Record demo GIF — `docs/promotion/assets/flapi-demo.gif` (36 s, 825 KB, VHS; embedded at the top of Readme.md). Re-record anytime: `vhs docs/promotion/assets/demo.tape`
20-
- [x] Three more scenario GIFs (all real recordings; see `assets/README.md`): **agent-over-MCP** (`flapi-demo-agent.gif` — Claude Code answering via `customer_lookup`), **agent on BigQuery** (`flapi-demo-bigquery.gif` — public dataset, typed params, "the model never writes SQL"), **self-packaging deploy** (`flapi-demo-pack.gif`). SAP and SharePoint scenarios documented as blocked (no live SAP system / no DuckDB SharePoint connector) rather than faked.
20+
- [x] Four more scenario GIFs (all real recordings; see `assets/README.md`): **agent-over-MCP** (`flapi-demo-agent.gif` — Claude Code answering via `customer_lookup`), **agent on BigQuery** (`flapi-demo-bigquery.gif` — public dataset, typed params, "the model never writes SQL"), **self-packaging deploy** (`flapi-demo-pack.gif`), **SharePoint lists** (`flapi-demo-sharepoint.gif` — live Microsoft 365 list via the erpl-web extension's `ATTACH ... TYPE sharepoint_lists`, agent analyzes the tracker). SAP remains blocked (no live ABAP system) rather than faked.
2121
- [x] Filed + fixed two launch-blocking bugs found while recording: [#100](https://github.com/DataZooDE/flapi/issues/100) MCP `logging: null` breaks the Claude Code handshake ([PR #102](https://github.com/DataZooDE/flapi/pull/102)); [#101](https://github.com/DataZooDE/flapi/issues/101) `read_parquet` fails on `embed://` bundles ([PR #103](https://github.com/DataZooDE/flapi/pull/103)). **Both must merge + ship in a release before the MCP launch angle works for real users.**
2222
- [ ] README polish: lead with the MCP angle
2323

docs/promotion/assets/README.md

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ comment header in each tape says where to run it from and what it needs.
1010
| `flapi-demo-agent.gif` | Claude Code as an agent on flAPI MCP tools (Basic auth, per-tool RBAC) | 38 s | trunk build with fix [#100](https://github.com/DataZooDE/flapi/issues/100) |
1111
| `flapi-demo-bigquery.gif` | An AI agent on top of BigQuery: one YAML tool, typed params, "the model never writes SQL" | 35 s | trunk build with fix #100; needs Google ADC |
1212
| `flapi-demo-pack.gif` | `flapi pack`: fold config + SQL + data into one binary, deploy = scp | 29 s | released v26.07.13 (`uvx`) |
13+
| `flapi-demo-sharepoint.gif` | A SharePoint list as REST + MCP tool via the [erpl-web](https://github.com/DataZooDE/erpl-web) DuckDB extension (`ATTACH ... TYPE sharepoint_lists`), agent analyzes the live list | 34 s | trunk build with fix #100; needs Azure app credentials (Graph) |
1314

1415
Demo project trees used by the recordings are in `demo-projects/`
1516
(`pack-myapi/` for the pack demo — CSV data, see #101 for why not parquet;
@@ -25,8 +26,17 @@ shows it).
2526
release containing the fixes ships.
2627
- Port 8080 was occupied on the recording machine, hence 8084/8085/8086 in
2728
the tapes.
28-
- Scenarios considered and NOT recorded, honestly: **SAP/ERPL** (the example
29-
targets a localhost ABAP trial system that wasn't running; the ERPL demo
30-
needs a live SAP box — record `examples/sqls/sap/` flows when one is up)
31-
and **SharePoint lists** (no DuckDB connector; would need a Microsoft
32-
Graph + `httpfs`/`read_json` recipe and a real tenant — do not fake it).
29+
- The SharePoint demo runs on the **erpl_web** community extension
30+
(`INSTALL erpl_web FROM community` — works on flAPI's embedded DuckDB
31+
1.5.3 despite the erpl-web README saying 1.5.4+). Credentials come from
32+
erpl-web's `.env.microsoft` (`ERPL_MS_*` vars, Azure app with Graph
33+
client-credentials); the committed `demo-projects/sharepoint/flapi.yaml`
34+
only references `{{env.*}}` — no secrets. The "project tracker" rows
35+
(items 54–59 in TestList on clouddatazoo.sharepoint.com) were seeded for
36+
the demo via `graph_sharepoint_create_item`; the query filters
37+
`Number >= 10` so the pre-existing Foo/Bar/Baz CI fixture rows stay
38+
untouched and invisible.
39+
- Scenario considered and NOT recorded, honestly: **SAP/ERPL** — the
40+
example targets a localhost ABAP trial system that wasn't running; the
41+
ERPL demo needs a live SAP box. Record `examples/sqls/sap/` flows when
42+
one is up.
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
project-name: sharepoint-api
2+
project-description: SharePoint lists as REST + MCP via erpl_web
3+
4+
template:
5+
path: './sqls'
6+
environment-whitelist:
7+
- '^ERPL_MS_.*'
8+
9+
connections:
10+
sharepoint:
11+
init: |
12+
INSTALL erpl_web FROM community;
13+
LOAD erpl_web;
14+
CREATE OR REPLACE SECRET ms_graph (
15+
TYPE microsoft_graph,
16+
PROVIDER client_credentials,
17+
tenant_id '{{env.ERPL_MS_TENANT_ID}}',
18+
client_id '{{env.ERPL_MS_CLIENT_ID}}',
19+
client_secret '{{env.ERPL_MS_CLIENT_SECRET}}'
20+
);
21+
ATTACH 'Kommunikationswebsite' AS sp (TYPE sharepoint_lists, SECRET 'ms_graph');
22+
properties:
23+
list: 'TestList'
24+
25+
duckdb:
26+
db_path: ':memory:'
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
SELECT id, Title AS project, Number AS pct_complete, Date AS due
2+
FROM sp.main."{{{ conn.list }}}"
3+
WHERE Title IS NOT NULL
4+
AND Number >= {{#params.min_pct}}{{ params.min_pct }}{{/params.min_pct}}{{^params.min_pct}}10{{/params.min_pct}}
5+
ORDER BY Number
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
mcp-tool:
2+
name: project_tracker
3+
description: The team's SharePoint project tracker — project, % complete, due date
4+
5+
request:
6+
- field-name: min_pct
7+
field-in: query
8+
description: Only projects at least this % complete
9+
required: false
10+
validators:
11+
- type: int
12+
min: 10
13+
max: 100
14+
15+
template-source: items.sql
16+
connection:
17+
- sharepoint
362 KB
Loading
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# flAPI SharePoint-lists agent demo — record from /tmp/spdemo.
2+
# Needs: locally built flapi (>= fix #100) on PATH, erpl-web .env.microsoft
3+
# credentials (Azure app w/ Graph Sites.Read), claude CLI, port 8087 free.
4+
Output flapi-demo-sharepoint.gif
5+
6+
Set FontSize 17
7+
Set Width 1200
8+
Set Height 720
9+
Set Padding 12
10+
Set Theme "Catppuccin Mocha"
11+
Set TypingSpeed 35ms
12+
Set Shell bash
13+
14+
Hide
15+
Type `export PATH=/home/jr/Projects/datazoo/flapi/build/debug:$PATH; set -a; source /home/jr/Projects/datazoo/erpl-web/.env.microsoft; set +a; claude mcp remove flapi >/dev/null 2>&1; clear`
16+
Enter
17+
Sleep 2s
18+
Show
19+
20+
Type `# Your team's SharePoint list as an API + AI tool (DuckDB + erpl-web):`
21+
Enter
22+
Sleep 1.5s
23+
Type `sed -n '/init:/,/list:/p' flapi.yaml`
24+
Enter
25+
Sleep 4.5s
26+
27+
Type `flapi -c flapi.yaml --port 8087 > /tmp/flapi.log 2>&1 &`
28+
Enter
29+
Hide
30+
Sleep 65s
31+
Show
32+
Type `claude mcp add --transport http flapi http://localhost:8087/mcp/jsonrpc`
33+
Enter
34+
Sleep 3s
35+
36+
Type `claude -p "Which projects in our SharePoint tracker are less than 50% complete, and when are they due? Use the flapi tools." --allowedTools mcp__flapi__project_tracker`
37+
Enter
38+
Hide
39+
Sleep 75s
40+
Show
41+
Sleep 2s
42+
43+
Type `# Live Microsoft 365 data — OAuth2 via DuckDB secrets. The model never writes SQL.`
44+
Enter
45+
Sleep 4s

0 commit comments

Comments
 (0)