Skip to main content
Glama
insight-blueprint

insight-blueprint

by etoyama

insight-blueprint

PyPI CI License: MIT Python 3.11+ Buy Me A Coffee

A Python MCP server for hypothesis-driven data analysis. Manage analysis designs, data catalogs, and review workflows through Claude Code or any MCP-compatible client.

Installation

# Option 1: From the official marketplace
claude plugin install etoyama/insight-blueprint

# Option 2: Via custom marketplace (permanent install)
/plugin marketplace add etoyama/insight-blueprint
/plugin install insight-blueprint@insight-blueprint-marketplace

# Option 3: From a local clone (session only)
git clone https://github.com/etoyama/insight-blueprint.git
claude --plugin-dir ./insight-blueprint

All options provide 8 analysis skills and auto-configure the MCP server. A WebUI dashboard opens automatically at http://127.0.0.1:3000.

Tip: Option 3 loads the plugin for the current session only. Add a shell alias for convenience:

alias claude-ib='claude --plugin-dir /path/to/insight-blueprint'

Alternative: Direct Execution

# Start the server without plugin (zero-install)
uvx insight-blueprint --project /path/to/my-analysis

# Or install permanently
uv tool install insight-blueprint
insight-blueprint --project /path/to/my-analysis

Updating

When a new version is published, run the following from within Claude Code to pull the latest plugin (auto-update is off by default for third-party marketplaces):

/plugin marketplace update insight-blueprint-marketplace
/plugin update insight-blueprint@insight-blueprint-marketplace

See CHANGELOG.md for release notes.

Optional: Python Package

For data-lineage tracking with tracked_pipe in your notebooks/scripts:

uv add insight-blueprint

This is optional but recommended for analysis pipeline transparency. MCP tools work without it.

Related MCP server: Dataiku DSS MCP Server

Features

MCP Tools

insight-blueprint exposes 18 tools via the Model Context Protocol, allowing AI assistants to manage your analysis workflow:

Category

Tools

Analysis Design

create_analysis_design, update_analysis_design, get_analysis_design, list_analysis_designs

Data Catalog

add_catalog_entry, update_catalog_entry, get_table_schema, search_catalog

Domain Knowledge

get_domain_knowledge, extract_domain_knowledge, save_extracted_knowledge, suggest_knowledge_for_design, suggest_cautions

Review Workflow

transition_design_status, save_review_comment, save_review_batch, get_review_comments

Project

get_project_context

WebUI Dashboard

A browser-based dashboard (http://127.0.0.1:3000) with two tabs:

  • Designs -- Browse analysis designs, view details (overview + history), and track status transitions

  • Catalog -- Search domain knowledge, browse data sources, and check cautions

Bundled Skills

The plugin provides 10 analysis skills that are automatically available after installation:

  • /rq-problematization -- Generate impactful research questions by problematizing the assumptions in prior research (upstream of framing)

  • /analysis-framing -- Explore available data and existing analyses to frame a hypothesis direction

  • /analysis-design -- Guided workflow for creating hypothesis documents

  • /analysis-journal -- Record reasoning steps during analysis (observations, evidence, decisions, questions)

  • /analysis-reflection -- Structured reflection to draw conclusions or branch hypotheses

  • /analysis-revision -- Guided revision workflow for addressing review comments

  • /catalog-register -- Step-by-step data source registration

  • /data-lineage -- Track data transformations and export lineage diagrams (Mermaid)

  • /batch-analysis -- Overnight batch execution of queued designs (headless notebooks, self-review, journal recording)

  • /premortem -- Pre-flight risk evaluation of queued designs with approval token issuance (gates /batch-analysis)

Skills support both English and Japanese trigger phrases.

Analysis Workflow

Skills chain together to support the full hypothesis-driven analysis lifecycle:

/rq-problematization (problematize assumptions → research questions)  ← optional upstream
    ↓ (RQ Brief)
/analysis-framing (explore data, frame direction)
    ↓
/analysis-design (create hypothesis)
    ↓ (interactive)          ↓ (batch)
/analysis-journal        /batch-analysis (overnight headless)
    ↓                        ↓
    ↓
/analysis-reflection (reflect → conclude or branch)      ← morning review
    ↓ ↗ back to /analysis-framing (new direction needed)
    ↕ WebUI review → /analysis-revision (address review comments)
/catalog-register (register findings as domain knowledge)

Each design has an analysis_intent field (exploratory, confirmatory, or mixed) to distinguish whether you're testing a specific hypothesis or exploring data for patterns. The Insight Journal (.insight/designs/{id}_journal.yaml) tracks your reasoning process with 8 event types mapped to the Narrative Scaffolding framework (Huang+ IUI 2026).

Overnight Operation

Batch analysis runs overnight via a two-step workflow: risk evaluation followed by headless execution.

Workflow

/premortem --queued --yes --mode review
    ↓ (exit 0: token issued)
    ↓ (exit 2: HIGH detected, human triage needed)
/batch-analysis --approved-by TOKEN
    ↓
Morning review: summary.md + /analysis-reflection per design

Automation Modes

Mode

HIGH Risk Handling

Human Interaction

manual

Interactive prompt for every design

Required

review

Blocks on HIGH (exit 2), auto-approves LOW/MEDIUM

Only when HIGH detected

auto

Includes HIGH in approved set with warning

None

Set the mode in .insight/config.yaml under batch.automation (default: review).

Phased Rollout of --approved-by

The --approved-by TOKEN argument is introduced in two phases:

  • Phase A (batch.approved_by_required: false): Omitting the flag prints a warning and runs in legacy mode. Existing workflows are not broken.

  • Phase B (batch.approved_by_required: true): Omitting the flag causes exit 1. All batch runs must go through /premortem first.

Transition from Phase A to Phase B by setting approved_by_required: true in .insight/config.yaml when your team is ready.

CLI Options

insight-blueprint --project /path/to/project   # Specify project directory
insight-blueprint --no-browser                  # Suppress browser auto-open
insight-blueprint --version                     # Show version
insight-blueprint                               # Use current directory

Team Server Mode

Multiple Claude Code instances can share a single insight-blueprint server via MCP SSE (Server-Sent Events).

Server mode (WebUI + MCP SSE)

insight-blueprint --project /path/to/project --mode server --port 4000

Each Claude Code instance connects by adding to .claude/settings.json:

{
  "mcpServers": {
    "insight-blueprint": {
      "type": "sse",
      "url": "http://<host>:4000/mcp/sse"
    }
  }
}

Headless mode (MCP SSE only, no WebUI)

insight-blueprint --project /path/to/project --mode headless --port 4000

Options

Option

Default

Description

--mode full

(default)

stdio MCP + WebUI on localhost:3000. Standard single-user mode

--mode server

-

HTTP MCP SSE + WebUI on the same port. For team/multi-client use

--mode headless

-

HTTP MCP SSE only (no WebUI). Lightweight deployment

--host

0.0.0.0

Bind address (server/headless mode only)

--port

4000

Listen port (server/headless mode only)

--no-browser

false

Suppress browser auto-open in full mode

WARNING: No authentication. Phase 1 does not include authentication. Run the server on a trusted network only, or bind to localhost with --host 127.0.0.1.

Migration Guide (from v0.3.x)

If you previously used insight-blueprint without the plugin system, clean up the old skill copies:

# Remove old skill copies (now provided by the plugin)
rm -rf .claude/skills/analysis-design .claude/skills/analysis-framing \
       .claude/skills/analysis-journal .claude/skills/analysis-reflection \
       .claude/skills/analysis-revision .claude/skills/catalog-register \
       .claude/skills/data-lineage

# Remove old rule copies (now integrated into skill definitions)
rm -rf .claude/rules/analysis-workflow.md .claude/rules/catalog-workflow.md \
       .claude/rules/insight-yaml.md .claude/rules/extension-policy.md

The plugin's skills take precedence, so old copies won't cause errors but should be removed to avoid confusion.

Development

Requires Python 3.11+, uv, and Node.js (for frontend build).

git clone https://github.com/etoyama/insight-blueprint.git
cd insight-blueprint
uv sync --all-extras

# Build frontend assets (required for WebUI)
poe build-frontend

# Run lint + typecheck + test
poe all

See CONTRIBUTING.md for setup instructions, code style, and how to submit pull requests.

Tech Stack

Tool

Purpose

uv

Package management

ruff

Linting and formatting

ty

Type checking

pytest

Testing

FastMCP

MCP server framework

FastAPI

WebUI backend

Support

If you find this project useful, consider buying me a coffee.

Buy Me A Coffee

License

MIT

Available Tools

18 tools
add_catalog_entryC

Register a new data source in the catalog.

Inputs: name (required), type (required), source_id (required), connection (required), +5 more. Returns: object

create_analysis_designA

Create a new analysis design document.

Creates a YAML file in .insight/designs/ with 'in_review' status. theme_id must match [A-Z][A-Z0-9]* pattern (e.g., 'FP', 'TX', 'DEFAULT').

methodology: Analysis method dict with required 'method' key. Example: {"method": "OLS", "package": "statsmodels", "reason": "..."} WARNING: Should rarely be None — methodology is a core design field.

Returns: dict with id, title, status, message

Inputs: title (required), hypothesis_statement (required), hypothesis_background (required), chart, +8 more. Returns: object

extract_domain_knowledgeA

Extract domain knowledge from review comments as preview.

Returns extracted entries for user review before persistence. Call save_extracted_knowledge() to persist confirmed entries.

Returns: dict with design_id, entries, count, message

Inputs: design_id (required). Returns: object

get_analysis_designA

Retrieve an analysis design by ID.

Returns the full design as a dict, or an error dict if not found.

Inputs: design_id (required). Returns: object

get_domain_knowledgeC

Get domain knowledge entries for a data source.

Inputs: source_id (required), category. Returns: object

get_project_contextA

Get aggregated project context including all domain knowledge.

Returns sources, knowledge entries, rules, and counts from both catalog and review-extracted knowledge.

Inputs: no named parameters. Returns: object

get_review_commentsA

Get review comments for a design.

Returns all review batches sorted by created_at descending (newest first). Returns empty list if no reviews exist or file is corrupted.

Inputs: design_id (required). Returns: object

get_table_schemaA

Get the column schema for a data source.

Inputs: source_id (required). Returns: object

list_analysis_designsA

List all analysis designs, optionally filtered by status.

Args: status: Optional filter (in_review|revision_requested|analyzing|supported|rejected|inconclusive)

Returns: dict with 'designs' list and 'count' integer

Inputs: status. Returns: object

save_extracted_knowledgeA

Persist user-confirmed knowledge entries to extracted_knowledge.yaml.

Call extract_domain_knowledge() first to get preview entries, then pass confirmed (optionally adjusted) entries here.

Args: design_id: The design ID the entries were extracted from entries: List of dicts with keys: key, content, category, affects_columns

Returns: dict with design_id, saved_entries, count, message

Inputs: entries (required), design_id (required). Returns: object

save_review_batchA

Save a batch of review comments and transition the design status.

The design must be in reviewable status (in_review or revision_requested). Each comment can optionally include target_section and target_content for inline anchoring.

Valid status_after values: revision_requested, analyzing, supported, rejected, inconclusive.

Returns: dict with batch_id and status_after on success; {error} on failure

Inputs: comments (required), design_id (required), status_after (required), reviewer. Returns: object

save_review_commentA

Save a review comment and transition the design status.

The design must be in reviewable status (in_review or revision_requested). Valid post-review statuses: revision_requested, analyzing, supported, rejected, inconclusive.

Returns: dict with comment_id, design_id, status_after, message

Inputs: status (required), comment (required), design_id (required), reviewer. Returns: object

search_catalogC

Search the data catalog using full-text search.

Inputs: query (required), tags, source_type. Returns: object

suggest_cautionsA

Suggest cautions for the given table/source names.

Searches all domain knowledge entries (catalog and extracted) by matching affects_columns against provided table names.

Args: table_names: Comma-separated string of table/source names

Returns: dict with table_names, cautions, count

Inputs: table_names (required). Returns: object

suggest_knowledge_for_designA

Suggest knowledge entries relevant to a design section.

Filters by category via SECTION_KNOWLEDGE_MAP, then applies per-category matching strategies (theme_id, source_ids, FTS5, lineage).

Args: section: Design section name (e.g., hypothesis_statement, metrics) theme_id: Theme ID to match findings/context by source_ids: Comma-separated source IDs for caution/definition matching hypothesis_text: Text to search via FTS5 for methodology matching parent_id: Design ID to walk ancestor chain for finding collection

Returns: dict with section, suggestions, total

Inputs: section, theme_id, parent_id, source_ids, +1 more. Returns: object

transition_design_statusA

Transition a design to the given target status.

Valid transitions depend on the current status:

  • in_review -> revision_requested, analyzing, supported, rejected, inconclusive

  • revision_requested -> in_review

  • analyzing -> in_review

  • supported, rejected, inconclusive -> (terminal, no transitions)

Returns: dict with design_id, status on success; {error} on failure

Inputs: status (required), design_id (required). Returns: object

update_analysis_designA

Partially update an existing analysis design.

Only provided fields are updated. Returns the updated design as a dict, or an error dict if design_id not found. Status changes must go through transition_design_status.

Inputs: design_id (required), chart, title, metrics, +7 more. Returns: object

update_catalog_entryC

Update an existing data source in the catalog.

Inputs: source_id (required), name, tags, columns, +2 more. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 18 tools

    Disambiguation3/5

    Most tools have clear single purposes (get vs list, create vs update), but there is overlap between transition_design_status and save_review_comment/save_review_batch, which also transition status. The suggestion tools (suggest_cautions vs suggest_knowledge_for_design) are distinct in inputs but may be confused in intent.

    Naming Consistency5/5

    All tool names follow a predictable verb_noun pattern with snake_case (get_*), (create_*), (update_*), (save_*), etc. The convention is uniform and makes it easy to infer functionality.

    Tool Count4/5

    18 tools is on the higher end but appropriate given the server covers analysis design lifecycle, catalog management, review workflows, and knowledge extraction. Each tool serves a distinct functional area, so the count feels justified rather than bloated.

    Completeness3/5

    Core workflows for design creation, review, and knowledge extraction are well covered. However, there are no delete operations (e.g., delete_analysis_design, delete_catalog_entry) and no direct way to add domain knowledge manually. These gaps may require workarounds in agent workflows.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers