Skip to main content
Glama

streamlit-dashboard-mcpserver

QueryForge — データベースに話しかける。ダッシュボードに変わるのを見守る。

Claude が任意の SQLite データベースにクエリを実行し、ナレッジベースから企業固有のビジネスロジックを取得し、ライブの Streamlit ダッシュボードを構築できるようにする、統合 Model Context Protocol サーバーです。すべて 1 回の会話で完結します。

Project Structure

streamlit-dashboard-mcpserver/
├── .venv/                  # Python virtual environment (managed by uv)
├── data/
│   ├── seed.py             # Generates the sample CRM database
│   └── database.db         # SQLite database (generated by seed.py)
├── knowledge_base/
│   ├── docs/                # Source documents (formulas, business rules, definitions)
│   ├── ingest.py             # Chunks + embeds docs into the vector store
│   └── index/                 # Persisted vector store (generated by ingest.py)
├── .python-version         # Pinned Python version for uv
├── dashboard.py            # Auto-generated by Claude at runtime
├── server.py               # The MCP server
├── uv.lock                 # Dependency lock file
└── README.md

Related MCP server: TheMCP-server

What it does

Tool

Description

list_tables

データベース内のすべてのテーブルを一覧表示します

describe_table

テーブルの列、型、制約を表示します

sample_table

任意のテーブルの最初の N 行を返します

query_database

読み取り専用の SELECT クエリを実行します

query_knowledge_base

エンタープライズドキュメント(カスタム計算式、ビジネスルール、メトリクス定義)から関連チャンクを取得し、Claude が正しいクエリとダッシュボードロジックを書くのを支援します

create_dashboard

Streamlit アプリを書き、依存関係を自動インストールし、起動します

stop_dashboard

実行中の Streamlit プロセスを停止します

get_dashboard_status

ダッシュボードが実行中かどうか、どのポートで実行されているかを確認します

read_dashboard

現在の dashboard.py ソースを読み取ります

読み取り専用が強制されます。 INSERT、UPDATE、DELETE、DROP およびその他のすべての書き込み操作はサーバーレベルでブロックされます。ナレッジベースは取得専用です。Claude はこのサーバーを介して書き戻すことはできません。

query_knowledge_base は、ダッシュボードを単なる推測ではなく 正しい ものにするためのものです。組織が「純収益」や「アクティブ顧客」などをどのように定義しているかを推測する代わりに、Claude は SQL やダッシュボードコードを書く前に、チャンク化されたエンタープライズドキュメントから実際に文書化された計算式を取得します。

screenshot1-dashboard screenshot2-chat

Prerequisites

  • Python 3.11+(.python-version で固定)

  • uv — このプロジェクトですでに使用されています(uv.lock を参照)

  • Claude Desktop

  • ナレッジベース用のソースドキュメントのフォルダ(PDF、Markdown、またはプレーンテキスト — 例:社内の計算式シート、メトリクス用語集、SOP など)

Installation

1. Claude Desktop をインストール

お使いの OS 用の Claude Desktop をダウンロードしてインストールします: Windows / macOS: https://claude.ai/download インストール後、Anthropic アカウントでサインインします。

2. リポジトリをクローン

HTTPS:

git clone https://github.com/your-username/streamlit-dashboard-mcpserver.git
cd streamlit-dashboard-mcpserver

SSH:

git clone git@github.com:your-username/streamlit-dashboard-mcpserver.git
cd streamlit-dashboard-mcpserver

GitHub CLI:

gh repo clone your-username/streamlit-dashboard-mcpserver
cd streamlit-dashboard-mcpserver

3. uv で環境をセットアップ

このプロジェクトは環境管理に uv を使用しています。.python-version と uv.lock ファイルはすでにコミットされているため、セットアップは 1 つのコマンドで完了します。

uv をまだインストールしていない場合はインストールします:

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

ロックファイルから仮想環境を作成し、すべての依存関係をインストールします:

uv sync

環境をアクティベートします:

# Windows PowerShell
.venv\Scripts\Activate.ps1
# Windows CMD
.venv\Scripts\activate.bat

アクティブになると、プロンプトにプロジェクト名が表示されます:

(streamlit-dashboard-mcpserver) PS C:\Users\benij\ds_project\streamlit-dashboard-mcpserver>

主要なパッケージがインストールされていることを確認します:

pip list | findstr "mcp streamlit"

不足しているものがある場合:

uv pip install mcp streamlit pandas plotly

4. データベースを生成

data/ 内の seed.py スクリプトは、完全なスノーフレークスキーマにわたる 10,000 件以上のレコードを持つ現実的な CRM データベースを生成します。

cd data
python seed.py
cd ..

これにより data/database.db が作成されます。これは MCP サーバーが読み取るものです。

5. ナレッジベースインデックスを構築

エンタープライズドキュメント(計算式シート、メトリクス定義、ビジネスルール — PDF、Markdown、または .txt)を knowledge_base/docs/ に配置し、次を実行します:

python knowledge_base/ingest.py

これによりドキュメントがチャンク化され埋め込まれ、結果のベクトルストアが knowledge_base/index/ に書き込まれます。これは実行時に query_knowledge_base が読み取るものです。ソースドキュメントが変更された場合は、このスクリプトを再実行してください。

6. Claude Desktop を設定

Claude Desktop は JSON 設定ファイルから MCP サーバー定義を読み取ります。

設定ファイルを開きます:

notepad $env:APPDATA\Claude\claude_desktop_config.json

ファイルがまだ存在しない場合、Notepad が作成を尋ねます — [はい] をクリックします。

次の設定を貼り付け、benij を Windows ユーザー名が異なる場合は置き換えます:

{
  "mcpServers": {
    "sqlite-dashboard": {
      "command": "C:\\Users\\benij\\ds_project\\streamlit-dashboard-mcpserver\\.venv\\Scripts\\python.exe",
      "args": [
        "C:\\Users\\benij\\ds_project\\streamlit-dashboard-mcpserver\\server.py"
      ],
      "env": {
        "DB_PATH": "C:\\Users\\benij\\ds_project\\streamlit-dashboard-mcpserver\\data\\database.db",
        "DASHBOARD_PORT": "8501",
        "KB_INDEX_PATH": "C:\\Users\\benij\\ds_project\\streamlit-dashboard-mcpserver\\knowledge_base\\index"
      }
    }
  }
}

正確な Python パスを確認するには、venv をアクティブにして次を実行します:

where.exe python

期待される出力:

C:\Users\benij\ds_project\streamlit-dashboard-mcpserver\.venv\Scripts\python.exe

その正確な文字列を設定の command 値として使用します。

常に絶対パスを使用してください。 Claude Desktop は MCP サーバーを予測できない作業ディレクトリからサブプロセスとして起動するため、相対パスは正しく解決されません。

7. Claude Desktop を再起動

設定を保存したら、Claude Desktop を完全に終了します — システムトレイアイコンを右クリック → [終了] を選択します。その後、再度開きます。

再起動したら、チャット入力の左下にある 🔨 ハンマーアイコンをクリックします。9 つのツール がすべて一覧表示され、サーバーが接続されていることを確認できます。

Usage

接続したら、自然に Claude に話しかけます:

"What tables are in my database?"

"How do we define 'net revenue' internally?"

"Show me the top 10 customers by total revenue, using our
 company's official revenue formula"

"Build a dashboard with monthly sales trends, a bar chart
 by product category, and a salesperson leaderboard"

Claude はスキーマを探索し、必要に応じてナレッジベースから関連するビジネスロジックを取得し、クエリを実行し、Streamlit コードを書き、不足している依存関係をインストールし、ブラウザで開く URL を返します — デフォルトでは http://localhost:8501 です。

Environment Variables

Variable

Default

Description

DB_PATH

./database.db

SQLite データベースへの絶対パス

DASHBOARD_PORT

8501

Streamlit がリッスンするポート

KB_INDEX_PATH

./knowledge_base/index

ingest.py によって構築されたベクトルストアへの絶対パス

Troubleshooting

🔨 Claude Desktop にハンマーアイコンが表示されない 設定 JSON が無効である可能性が高いです — 末尾のカンマや括弧の不一致がよくある間違いです。jsonlint.com に貼り付けて検証してください。設定を変更した後は、必ず Claude Desktop を完全に終了して再度開いてください。

「データベースが見つかりません」エラー DB_PATH が絶対パスであり、database.db が data/ フォルダ内に存在することを確認してください。まだ生成されていない場合は seed.py を実行してください。

query_knowledge_base が結果を返さない / インデックスが空 knowledge_base/docs/ に実際にドキュメントがあることを確認し、python knowledge_base/ingest.py を再実行してください。設定の KB_INDEX_PATH が knowledge_base/index/ を指していることを確認してください。

Streamlit ページが読み込まれない Claude に「ダッシュボードは実行中ですか?」と尋ねて get_dashboard_status を呼び出してください。実行中でない場合は、Claude に create_dashboard を再度実行するよう依頼してください。また、ポート 8501 が他のプロセスによって使用されていないか確認してください。

uv sync が失敗する インストールされている Python のバージョンが .python-version と一致していることを確認してください。python --version で確認し、必要に応じて python.org から正しいバージョンをインストールしてください。

.venv をアクティベートするときの PowerShell ExecutionPolicy エラー

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

その後、再度アクティベートします。

About

自然言語を SQL クエリと、ビジネスロジックを認識したライブの Streamlit ダッシュボードに変換する MCP サーバーです。Claude と、エンタープライズ固有のルールと計算式の検索拡張ナレッジベースを利用しています。

Available Tools

10 tools
create_dashboardB
Creates or updates the Streamlit dashboard with the given Python code.
Automatically installs missing dependencies and starts/reloads the app.

IMPORTANT: The variable DB_PATH is automatically injected at the top of
your code — always connect to the database using:
    conn = sqlite3.connect(DB_PATH)
Never hardcode a database path string yourself.

Args:
    code: Full Python source code for the Streamlit dashboard
NameRequiredDescriptionDefault
codeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full load. It discloses helpful side effects (auto-install dependencies, automatic DB_PATH injection) and the create-or-update dual behavior, but omits permission needs, error modes, and whether the update replaces the whole app or merges. Partial behavioral coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the caveat about DB_PATH. The 'Args' block is boilerplate but short. Some redundancy between the first sentence and the later 'starts/reloads the app' clause, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained. The description covers the key constraint (DB_PATH) and high-level behavior, but does not address what happens on failure, dependency install scope, or how to recover a bad deploy, which matters for an agent invoking a code-writing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the only param is described minimally as 'Full Python source code for the Streamlit dashboard.' The important detail about DB_PATH injection is stated as prose rather than tied to the code parameter, and there is no guidance on structure, length, or modules allowed. With low coverage the description should compensate more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (creates or updates) and resource (Streamlit dashboard) with the input that drives it (Python code). It does not explicitly contrast with siblings like read_dashboard or stop_dashboard, but the lifecycle role is clear from the phrasing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the code argument and the mention of reloading an existing app, but never states when to use this tool versus stop_dashboard/read_dashboard or what prerequisites exist. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_tableC
Show column names, types, and constraints for a table.

Args:
    table: Name of the table to describe
NameRequiredDescriptionDefault
tableYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about read-only nature, required permissions, or behavior for a nonexistent table. The statement of what is returned (columns, types, constraints) overlaps with the output schema, so it adds little behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is short and front-loaded with the key information. The appended 'Args:' block is slightly redundant for a one-parameter tool but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and this is a simple one-parameter read operation. Still, nothing addresses error cases, missing tables, or how this differs from list_tables/sample_table, leaving the definition at the minimum viable level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but 'Name of the table to describe' only restates the parameter name. It omits useful detail such as whether a schema qualifier is expected, case sensitivity, or how nested/qualified names are handled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Show column names, types, and constraints for a table'), so an agent immediately knows it returns schema metadata. It does not, however, distinguish itself from siblings like list_tables or sample_table, which also operate on table metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives such as list_tables (for enumeration) or sample_table (for row data). Usage is only implied by the purpose statement, leaving the agent to infer the boundary between this and its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboard_statusA

Returns whether the Streamlit dashboard is running and on which port.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it does disclose the essential trait: this is a status/read probe that returns a running flag and a port. It omits any note about authentication, side effects, or what happens when the dashboard is stopped, though for a zero-argument probe that gap is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the returned information is stated immediately with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't enumerate return values, and no parameters need explaining. The only missing piece is when to reach for this tool relative to the other dashboard tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline of 4 applies; there is no parameter semantics to document. The description correctly adds no redundant parameter commentary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Returns whether the Streamlit dashboard is running and on which port'), which is specific enough to distinguish it from create_dashboard, stop_dashboard, and read_dashboard. It doesn't explicitly name those siblings, but the status-vs-operate distinction is inherent in the wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to call this versus alternatives such as read_dashboard or create_dashboard, and no preconditions. The use case (checking readiness before another dashboard operation) is only inferable, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_base_infoA
Returns metadata about the current knowledge base:
total chunks, unique sources, collection name, embedding model.
Useful to verify that PDF ingestion completed successfully.
NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the disclosure burden. It signals a read-style metadata call and what is returned, but says nothing about permissions, behavior on an empty/uninitialized knowledge base, or whether the call has any cost or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the return payload and followed by the motivating use case. Nothing is padded, though the value could have been sharpened slightly by naming the sibling it contrasts with.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and with zero parameters there is no schema gap to compensate for. The only missing element is any note on failure/empty-state behavior in the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. The description adds no spurious parameter-like claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb (returns) with a specific resource (knowledge base) and enumerates the returned metadata: total chunks, unique sources, collection name, embedding model. This clearly separates it from the search-oriented sibling knowledge_search, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit purpose context: verifying that PDF ingestion completed successfully. It does not state when not to use it or point to an alternative, so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tablesA

List all tables in the SQLite database.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states the purpose but does not disclose any behavioral traits like read-only nature or performance implications, though the operation is obviously safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (five words) and front-loaded, containing no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and a presumably simple output schema, the description is sufficient. It could mention that it returns table names, but the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters and schema coverage is 100%, so the description does not need to add parameter info. It appropriately omits such details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action ('List') and the resource ('all tables in the SQLite database'), which is specific and clearly distinguishes from siblings like 'execute' or 'query'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (to get all tables), but does not provide explicit guidance on when not to use or mention alternatives. For a simple tool, this is acceptable but lacks some clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_databaseB
Run a SELECT query against the SQLite database.
Only read-only SELECT statements are allowed.

Args:
    sql: A valid SQLite SELECT statement
NameRequiredDescriptionDefault
sqlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and partially meets it by disclosing the read-only constraint ('Only read-only SELECT statements are allowed'). It does not cover error handling for non-SELECT input, permissions, or other runtime behavior, so the disclosure is useful but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded: purpose first, then the key constraint, then the argument. The Args section slightly repeats the SELECT requirement from the opening line, but the overall size is appropriate with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter) and an output schema exists, so the description need not explain return values. It covers purpose, the read-only constraint, and the parameter meaning, which is nearly sufficient; the main gap is the lack of sibling routing guidance, but that is a minor omission given the tool's straightforward scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does add meaning by specifying the parameter must be a valid SQLite SELECT statement (not arbitrary SQL), but it offers no detail on result handling, parameter binding, or syntax expectations beyond that. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Run') and resource ('SELECT query against the SQLite database'), making the tool's function clear. It does not explicitly distinguish itself from read-oriented siblings like list_tables or sample_table, but the 'arbitrary SELECT' scope is implied well enough for an agent to infer it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only says 'Only read-only SELECT statements are allowed' — a hard constraint, not usage guidance. It gives no indication of when to use query_database versus list_tables, describe_table, or sample_table, leaving the agent to infer routing on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_dashboardB

Returns the current contents of dashboard.py.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a safe, live read via 'current', but says nothing about what happens when the dashboard does not exist, permissions, or side effects. The output schema covers return values, but behavioral gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the resource stated first and no filler. Every word earns its place and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (0 params, output schema present), so the description need not explain returns. However, it omits error behavior and any routing hint against its many siblings, leaving the definition minimally adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline this scores 4. There is nothing for the description to disambiguate, and it correctly does not invent parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (returns) tied to a concrete resource (the contents of dashboard.py), so an agent knows this is a plain read of a file. It does not explicitly differentiate itself from siblings like get_dashboard_status, but the read-vs-status distinction is mostly inferable from the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the many siblings (create_dashboard, stop_dashboard, get_dashboard_status). Usage is only implied by the word 'Returns', with no conditions, prerequisites, or alternatives named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sample_tableB
Return the first N rows of a table (default 5, max 50).

Args:
    table: Name of the table to sample
    limit: Number of rows to return (default 5, max 50)
NameRequiredDescriptionDefault
limitNo
tableYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the default (5) and hard cap (max 50), but says nothing about row ordering (i.e., that 'first N' may be arbitrary without an ORDER BY), required permissions, or whether this is strictly read-only. The cap is the main behavioral fact conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose line is front-loaded and the Args block is compact. The default/max values are repeated in both the opening sentence and the args list, which is mild redundancy but acceptable given the schema has no descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a simple two-parameter read tool, the description covers purpose, both arguments, and the size constraint adequately; it only lacks sibling disambiguation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: both parameters are explained ('table: Name of the table to sample' and 'limit: Number of rows to return (default 5, max 50)'), including the default and constraint. Minor gap in that table-name qualification conventions (schema/catalog prefixes) are not addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Return the first N rows of a table'), which clearly conveys a sampling operation. It does not, however, differentiate itself from siblings like query_database or describe_table, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus query_database, describe_table, or list_tables, all of which are plausible alternatives for inspecting a table. No exclusions, prerequisites, or situational context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_dashboardB

Stops the running Streamlit dashboard process.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only asserts that a process is stopped. It does not disclose whether the operation is idempotent when nothing is running, whether it terminates the process forcibly or gracefully, whether any session state or data is lost, or what permissions are needed for a mutation-style action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the action front-loaded and no filler. It is efficient, though it is arguably too terse for a lifecycle-mutating action, leaving room for a short usage clause without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the zero-parameter schema is simple. However, with no annotations and a lifecycle-mutating operation, the description omits the prerequisite state and side effects an agent would need to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The schema confirms an empty argument object, matching the description's lack of parameter discussion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ("Stops") and resource ("the running Streamlit dashboard process"), which is unambiguous on its own. It contrasts implicitly with create_dashboard, get_dashboard_status, and read_dashboard by naming the lifecycle action, but never explicitly says how it differs from its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as get_dashboard_status (which would tell you whether a dashboard is running) or create_dashboard. The phrase "the running" implies a precondition but does not state what happens if no dashboard is running or when to prefer this over a status check.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 10 tool updatesv0.1.0
    • First observedcreate_dashboard
    • First observeddescribe_table
    • First observedget_dashboard_status
    • First observedknowledge_base_info
    • First observedknowledge_search
    • First observedlist_tables
    • First observedquery_database
    • First observedread_dashboard
    • First observedsample_table
    • First observedstop_dashboard

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource and action: table introspection (list/describe/sample), read-only querying, dashboard lifecycle management, and knowledge-base retrieval. Boundaries are clear, and the read-only query tool is explicitly separated from the preview/schema helpers.

Naming Consistency4/5

Most tools use a predictable verb_noun pattern (list_tables, describe_table, sample_table, query_database, create_dashboard, stop_dashboard, read_dashboard). However knowledge_search and knowledge_base_info flip to a noun_verb/compound form, a minor deviation from the dominant convention.

Tool Count4/5

Ten tools is well-scoped, and each earns its place within its functional group. It does span three distinct concerns (SQLite querying, Streamlit dashboard, knowledge base), which is slightly broad but still justified.

Completeness4/5

Dashboard lifecycle (create/stop/status/read) and table exploration plus read-only querying are well covered. Gaps exist: there is no knowledge-base ingestion tool despite referring to an ingested KB, and no way to modify or delete data.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    One config, one CLI that turns your databases (Postgres, MySQL, SQLite, MongoDB) into MCP servers for Claude, GPT, Cursor, and any MCP-compatible agent.
    3
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with SQLite databases, filesystem, AWS IAM, and Gmail through a master MCP server with a Streamlit UI optimized for Claude.
    1
    -
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Claude that connects to MySQL, MariaDB, and SQLite databases. Query your databases using natural language.
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A database-agnostic MCP server that enables natural language queries to your database through Claude or Copilot, automatically writing and executing SQL.
    8
    8 npm
    MIT