← library
skill🤖 AI agentsv1 · published 2026-10-20 · updated 2026-11-03

Read-only data teammate

For builders. Creates a small local tool that answers questions about a CSV export from your ERP or tracking system without being able to change it (read-only, no network), with ten test cases it must pass, a log of every question, and a one-switch way to turn it off. It can optionally expose the same read-only tools to an AI agent over MCP. Use when someone with a coding agent wants to give AI safe access to business data and test it before trusting it.

By Uplift Duo

Run it as a prompt

Paste this into any AI agent, or fetch it: curl -s https://uplift.page/api/v1/prompts/read-only-data-teammate/raw

prompt.md
# Read-only data teammate

Build me a small tool that lets AI answer questions about my data export but can never change it, and prove it works with tests before I trust it.

## Before you start

You need to be able to create files and run code (a coding agent, or a chat with code execution). If you can't, say so and stop.

Ask me two things, then stop and wait:

1. The path to my CSV export, or **"use the sample"**. For the sample, generate a made-up export of 200 rows with these columns: job_id, date_received, customer_code, category, make, model, serial, data_bearing (Y/N), disposition (resold, recycled, shredded), weight_lb, resale_usd. Use fake customer codes such as C-1042, never real names.
2. The five questions I most often ask of this data (for example "How many data-bearing devices did job 24-1187 have?", "Resale total by category last month?").

## Steps

1. **Read-only by design.** A single-file script in a language available here (Python standard library preferred). It opens the CSV read-only and never writes to it, uses no network, and has no delete or update functions. It answers each of my questions as a named function with clear inputs, such as `count_by_job(job_id, data_bearing=None)`.
2. **Log every call:** timestamp, function, inputs and row count, appended to a separate log file. Never log the full rows.
3. **Kill switch:** if a file named `DISABLED` exists next to the script, every function refuses with a clear message. Show me how to switch it on and off.
4. **Ten tests in a test file:** at least six normal questions with expected answers computed independently from the CSV, two edge cases (an unknown job, an empty category) and two safety tests (it can't write to the CSV, and it refuses when disabled). Run them, fix the tool (never the tests) and rerun until all ten pass. Show the final output.
5. **Optional, if I say yes:** expose the same functions as read-only tools over MCP (stdio), using the official MCP SDK for the language, and show the config to connect it to my agent. Same tests, same kill switch.
6. **Hand-off:** a short README covering what it does, the read-only guarantee and how it's enforced, how to run the tests, the kill switch, and where the log is.

## Rules

- Read-only and offline, always. If a question needs a write or the internet, refuse and explain why.
- Don't print, copy or upload real customer data. Answers are counts, totals and IDs, not full records.
- All tests must have passed before you call it done. Show the test output, not a summary of it.

Install it as a skill

Agents that support the Agent Skills standard load it automatically when it applies.

download
curl -fsSL https://uplift.page/p/read-only-data-teammate/SKILL.md --create-dirs -o .agents/skills/read-only-data-teammate/SKILL.md
or from any MCP client
MCP server: https://uplift.page/mcp
Tool: pull_skill  {"slug": "read-only-data-teammate"}

The full skill

Build me a small tool that lets AI answer questions about my data export but can never change it, and prove it works with tests before I trust it.

Before you start

You need to be able to create files and run code (a coding agent, or a chat with code execution). If you can't, say so and stop.

Ask me two things, then stop and wait:

  1. The path to my CSV export, or "use the sample". For the sample, generate a made-up export of 200 rows with these columns: job_id, date_received, customer_code, category, make, model, serial, data_bearing (Y/N), disposition (resold, recycled, shredded), weight_lb, resale_usd. Use fake customer codes such as C-1042, never real names.
  2. The five questions I most often ask of this data (for example "How many data-bearing devices did job 24-1187 have?", "Resale total by category last month?").

Steps

  1. Read-only by design. A single-file script in a language available here (Python standard library preferred). It opens the CSV read-only and never writes to it, uses no network, and has no delete or update functions. It answers each of my questions as a named function with clear inputs, such as count_by_job(job_id, data_bearing=None).
  2. Log every call: timestamp, function, inputs and row count, appended to a separate log file. Never log the full rows.
  3. Kill switch: if a file named DISABLED exists next to the script, every function refuses with a clear message. Show me how to switch it on and off.
  4. Ten tests in a test file: at least six normal questions with expected answers computed independently from the CSV, two edge cases (an unknown job, an empty category) and two safety tests (it can't write to the CSV, and it refuses when disabled). Run them, fix the tool (never the tests) and rerun until all ten pass. Show the final output.
  5. Optional, if I say yes: expose the same functions as read-only tools over MCP (stdio), using the official MCP SDK for the language, and show the config to connect it to my agent. Same tests, same kill switch.
  6. Hand-off: a short README covering what it does, the read-only guarantee and how it's enforced, how to run the tests, the kill switch, and where the log is.

Rules

  • Read-only and offline, always. If a question needs a write or the internet, refuse and explain why.
  • Don't print, copy or upload real customer data. Answers are counts, totals and IDs, not full records.
  • All tests must have passed before you call it done. Show the test output, not a summary of it.

Served from the uplift.page library and refreshed within 5 minutes of every update.