Skip to main content
Glama

looker-studio-mcp

MCP server that lets an AI assistant build Looker Studio (formerly Data Studio) dashboards on top of BigQuery: explore datasets, run read-only queries, create views, and design reports — charts, text, shapes, themes, exact layouts — then check the result with a screenshot.

Looker Studio has no public API to edit reports, so the report tools drive the real Looker Studio editor in a dedicated, signed-in Chrome profile (Playwright). BigQuery goes through its REST API.

"Build a dark dashboard for campusfind_analytics.bq_feature_usage:
 a header band, three KPI cards, uses per feature as bars, the share as a donut
 and a table at the bottom."

Quick start

npm install && npm run build
npx playwright install chromium            # Playwright's driver; reports run on your Google Chrome
node build/cli/main.js init --project my-gcp-project --enable-writes
node build/cli/main.js login               # sign in to Google once, then quit Chrome (⌘Q)
gcloud auth application-default login      # or --credentials-file for a service account
node build/cli/main.js auth                # checks both

Register it with your MCP client (Claude Code shown):

claude mcp add looker-studio -- node /path/to/looker-studio-mcp/build/cli/main.js serve --enable-writes

Related MCP server: BigQuery MCP Server

Table of contents

Authentication

Two independent credentials:

For

How

Check

BigQuery (datasets, queries, views)

Application Default Credentials, or auth.credentials_file (service account / authorized_user JSON)

auth

Looker Studio reports

A Chrome profile at ~/.looker-studio-mcp/browser-profile, signed in once with login

auth

login opens your regular Google Chrome (not an automated one: Google refuses sign-in in automated browsers). Sign in, open Looker Studio once, then quit Chrome completely with ⌘Q so the session is written to disk. Every later run reuses that profile; the server never sees your password.

Configuration

~/.looker-studio-mcp/config.yaml (written by init):

project_id: my-gcp-project      # default project for BigQuery tools
location: US                    # BigQuery location
auth:
  credentials: adc              # adc | file
  credentials_file: null
  browser_profile_dir: ~/.looker-studio-mcp/browser-profile
  browser_channel: chrome       # chrome | chromium | msedge
  headless: true                # false (or serve --headed) to watch the editor
writes:
  enabled: false
  dry_run: false                # true: write tools only describe what they would do
query:
  max_rows: 500
  max_bytes_billed: 1000000000  # 1 GB per query
ui:
  step_timeout_ms: 30000
logging:
  level: info

Environment overrides: LOOKER_STUDIO_MCP_PROJECT, LOOKER_STUDIO_MCP_CREDENTIALS_FILE, LOOKER_STUDIO_MCP_HEADLESS. CLI flags override both.

Write operations

Write tools are registered only when both writes.enabled: true is in the config and serve --enable-writes is passed. Every write is appended to ~/.looker-studio-mcp/audit.ndjson. With writes.dry_run: true they only describe the change.

delete_report also needs confirm_name to match the report's name. run_query refuses anything but a single SELECT/WITH, and every query is capped by max_bytes_billed.

Available tools

Read tools (always available)

Tool

What it does

check_auth

Checks the BigQuery credentials and the signed-in browser profile

list_datasets, list_tables, describe_table

Explore BigQuery (fields, row counts, view SQL)

run_query

One read-only query, rows as a table; dry_run estimates bytes

list_reports

Your Looker Studio reports, filterable by name

list_report_pages

Pages of a report

list_components

Charts, texts and shapes of a page: index, kind, layout

describe_component

Every Setup/Style setting of a component with its exact label and value

screenshot_report

PNG of a page in view mode, returned as an image

build_report_link

A Linking API URL that creates a report from BigQuery sources

Write tools (require writes)

Tool

What it does

create_view, delete_view

BigQuery views (dry-run validated first)

create_report

New report connected to a BigQuery table or view

add_data_source

Connect another BigQuery table to a report

refresh_data_source

Re-read a data source's fields after a column was added to the table or view

add_chart

Table, scorecard, time series, column, bar, pie, donut, line, area, combo, geo, treemap, gauge, pivot table, scatter — with dimensions, metrics (aggregation, display name), breakdown, sort, title, layout and Style settings

add_text

Text box: size, color, bold, alignment, background

add_shape

Rectangle, circle, triangle, heart, diamond, pentagon, star, hexagon, octagon, cylinder: fill, border, radius

update_component

Move/resize, Style/Setup settings, rename fields, restack (front/back), make report-level

delete_component

Remove a component

set_theme

Built-in theme, custom theme settings, page size

add_page, rename_report, share_report, delete_report

Report management

Settings are addressed by the label the properties panel shows ("Bar color", "Show data labels", "Border radius"…). describe_component lists them; settings that do not exist come back as warnings instead of failing silently.

Designing dashboards

See docs/design-guide.md for the canvas grid, the card pattern, color and type choices, and a full worked example. The short version:

  1. set_theme first (e.g. Constellation + "Report background color": "#0B1020").

  2. Shapes for structure (header band), then charts, each with layout on a 20 px grid.

  3. Card look on charts and scorecards: {"Background": "#151B33", "Border color": "#151B33", "Border radius": 16}.

  4. Human labels: metric label in add_chart, labels in update_component.

  5. screenshot_report after each section; fix with update_component.

CLI reference

Command

Purpose

serve [--config] [--project] [--enable-writes] [--headed]

Start the MCP server on stdio (default command)

login [--chrome-path]

Sign in to Google in the MCP browser profile

auth [--test]

Check BigQuery credentials and the browser sign-in

init --project <id> [--location] [--credentials-file] [--enable-writes] [--force]

Write the config without prompts

Limits

  • Report tools depend on the Looker Studio editor UI. Selectors are kept in one file (src/contexts/reports/infrastructure/ui/selectors.ts) and the editor is opened in English (hl=en) regardless of the account language, but a Looker Studio redesign can break them.

  • One editor action per page visit: each tool call takes a few seconds.

  • Time series need a date or date-time dimension with a sensible granularity; a raw timestamp gives "Too many rows". Add a DATE(...) column in a view.

  • Field chips are matched by their display name, so rename fields (labels) after the setup that refers to them.

  • add_page appends after the last page. share_report has not been exercised against a real recipient yet.

Architecture

DDD with bounded contexts:

src/contexts/authentication   Google token provider, browser session (Playwright profile)
src/contexts/google-api       Authenticated REST client with retries
src/contexts/bigquery         Datasets, tables, read-only queries, views
src/contexts/reports          Report model + use cases; UI adapter driving the editor
src/mcp                       Tool schemas, handlers, registry (writes gated)
src/shared-kernel             Config, logging, audit, errors, writes gate
src/cli                       serve, login, auth, init

Dependency rules are enforced by npm run check:deps. See AGENTS.md.

License

MIT

Available Tools

11 tools
check_authCheck authenticationA
Read-only

Check the Google API credentials (BigQuery) and the signed-in Looker Studio browser profile. Use first when other tools fail with auth errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful context beyond that: it discloses that two distinct credential surfaces are validated (BigQuery API credentials and the Looker Studio browser session), which is the key thing an agent needs to interpret a failure. It does not describe the result shape, keeping it short of a 5.

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?

Two sentences, no filler, and the most actionable information (the "use first on auth errors" trigger) is placed at the end as a clear directive. Every sentence earns its place.

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?

There is no output schema, so the description carries the burden of explaining what the check returns (e.g., which surface passed or failed, or how to interpret a partial failure). It says what is checked but not what the agent will get back, which is a real gap for a diagnostic tool with no structured output.

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 dimension starts at 4. There is nothing for the description to clarify beyond what the empty schema already conveys.

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 ("Check") and names the two concrete resources it validates: the Google API credentials (BigQuery) and the signed-in Looker Studio browser profile. This clearly separates it from the data-oriented siblings (run_query, list_reports, etc.), though it doesn't name any 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?

"Use first when other tools fail with auth errors" gives an explicit trigger condition that tells the agent exactly when to reach for this tool over retrying a failing sibling. It lacks a when-not clause, but the positive routing rule is unambiguous.

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

describe_componentDescribe a componentA
Read-only

Show every Setup and Style setting of one component with its exact label and current value. Use it to learn the labels update_component and the style options accept.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page; defaults to the first page
indexYesComponent index, as list_components shows it
report_idYesReport id or any URL of the report

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral context beyond that: it promises fidelity of the returned labels/values and ties the tool to a downstream workflow (update_component), which the annotations do not convey.

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?

Two short sentences with no waste; the primary action is front-loaded and the secondary usage hint follows. Every clause earns its place.

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?

With no output schema, the description partially compensates by stating what is returned (exact labels and current values), and pagination is covered by the schema's page parameter. It is nearly complete, though it says nothing about how component identity/indexing interacts with pagination across pages.

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 100% and every parameter (page, index, report_id) is documented in the schema itself. The description adds no syntax, format, or defaulting detail for these parameters, so the baseline of 3 applies.

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 ('Show every Setup and Style setting of one component') plus scope ('exact label and current value'), which separates it from the sibling list_components. It does not explicitly contrast with siblings like describe_table or list_components, so it stops short of a 5.

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 a clear reason to call it: to learn the labels that update_component and the style options accept, i.e. read-before-write reconnaissance. No when-not guidance or explicit alternative routing is offered, so it is clear context without exclusions.

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

describe_tableDescribe a table or viewA
Read-only

Show the fields of a table or view, its row count and, for views, the SQL.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_idYesTable or view id
dataset_idYesBigQuery dataset id, e.g. campusfind_analytics
project_idNoGoogle Cloud project id. Defaults to project_id in the config.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. Because no output schema exists, the description's disclosure of what is returned (field list, row count, and view SQL for views) carries real behavioral weight that the structured fields do not provide. It still omits error behavior (e.g. unknown table) and whether the row count is metadata-derived or a scan.

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 that states the resource first and then the returned artifacts, with no redundant or filler text.

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?

For a simple read-only metadata lookup with no output schema, the description covers the essential return shape (fields, row count, view SQL) and the schema covers all inputs. Only edge-case behavior (missing table, permission failures) is absent, which is a minor gap.

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 100%, with each of table_id, dataset_id, and project_id documented in the schema (including the config default for project_id). The description adds no parameter-level detail beyond that, so the baseline 3 applies.

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 ('Show') and resource (fields of a table or view), plus the extra returns of row count and view SQL, which clearly separates it from siblings like list_tables (enumeration) and run_query (execution). It never explicitly names a sibling, but the scope is unambiguous.

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 alternatives such as run_query or list_tables, and no prerequisites (e.g. that the dataset/table must already exist, or that this is the inspection step before querying). Usage is only inferable from the tool name and the described output.

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

list_componentsList page componentsA
Read-only

List the charts, texts and shapes of a report page with their index, kind and layout (x, y, width, height in px). Indexes go back to front; other component tools take them.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page; defaults to the first page
report_idYesReport id or any URL of the report

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful semantics beyond that—index ordering is back-to-front and the indexes are the shared key for other component tools—but says nothing about empty pages, pagination, or failure behavior.

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?

Two tight sentences with no filler. The payload content and field list come first, and the index-order/interop note is placed last as a supporting detail.

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?

With no output schema, the description carries the return-value burden and does so by naming the fields returned (index, kind, layout with units in px). It is nearly complete for a simple read tool; only edge-case behavior (empty page, ordering guarantees beyond back-to-front) is left unspecified.

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 100%, so both parameters (report_id, page) are already documented in the schema, including the 1-based/default-first-page semantics. The description adds no additional parameter meaning, so the baseline 3 applies.

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 names a specific verb (List) and resource (charts, texts and shapes of a report page) and enumerates the returned fields (index, kind, layout x/y/width/height). The phrase 'other component tools take them' also sets it apart from describe_component, which consumes rather than produces indexes.

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?

Usage is implied rather than stated: the mention that other component tools consume these indexes hints at the workflow, but there is no explicit when-to-use/when-not guidance and no sibling is named as an alternative (e.g. vs list_report_pages). Adequate context, but the agent must infer the routing.

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

list_datasetsList BigQuery datasetsC
Read-only

List the BigQuery datasets of a Google Cloud project.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoGoogle Cloud project id. Defaults to project_id in the config.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description adds nothing beyond that: no pagination behavior, no result caps, no ordering, and no note about what happens when project_id is omitted (the default is only stated in the schema).

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 front-loaded sentence with zero filler. It is efficient, though arguably terse to the point of leaving useful context unsaid.

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?

For a simple read-only list tool with full schema coverage and annotations covering the safety profile, the description is minimally viable. With no output schema, it would help to say what is returned (dataset IDs/names) or whether results are paginated.

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 100% and the single project_id parameter is fully documented in the schema, so baseline 3 applies. The description adds no extra meaning about the parameter, such as format expectations or behavior when the default is used.

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?

Clear verb+resource ('List the BigQuery datasets') with an explicit scope ('of a Google Cloud project'), which is more than a restatement of the name. However, it offers no differentiation from the sibling list_tables, which an agent could easily confuse it with.

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?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_tables or run_query. Usage is only implied by the verb 'List'.

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

list_report_pagesList report pagesC
Read-only

List the pages of a Looker Studio report.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport id or any URL of the report

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no pagination behavior, no note on what happens with an invalid report_id, no indication of who may read a report. It essentially restates the title.

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?

One short sentence with zero filler and the key resource front-loaded. It is efficient, though its brevity edges into under-specification rather than tight writing.

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?

For a simple read-only list operation with a single fully-described parameter, the description covers the essentials. Because there is no output schema, an agent still lacks any hint about the shape or size of the returned page list, and there is no mention of pagination, leaving a modest gap.

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?

The single parameter is fully documented in the schema itself ('Report id or any URL of the report'), and schema coverage is 100%, so the baseline is 3. The description contributes no additional parameter meaning, such as accepted URL formats or whether IDs are scoped to a workspace.

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 clear verb+resource ('List the pages of a Looker Studio report'), so it is unambiguous about what it returns. It does not, however, differentiate itself from siblings like list_reports or list_components, which also enumerate report-related entities.

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 about when to use this tool versus list_reports, list_components, or describe_component, nor any stated prerequisite (e.g. that a report_id must first be obtained). The only implied usage comes from the required parameter.

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

list_reportsList Looker Studio reportsB
Read-only

List the Looker Studio reports of the signed-in account, optionally filtered by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOnly reports whose name contains this text

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scoping context (signed-in account only) and that the name filter is optional, but says nothing about pagination, result limits, or ordering.

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?

One sentence, front-loaded with the verb and resource, with the filter qualifier trailing. No filler or redundancy.

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?

For a simple zero-required-parameter list tool with annotations covering the safety profile and a fully documented schema, this is nearly complete. The only gap is any hint about result size or pagination, which is minor for a listing tool.

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 100%, so the single 'query' parameter is already fully documented as a substring match on name. The description's 'optionally filtered by name' adds nothing beyond the schema, which is the baseline-3 case.

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 (List) and resource (Looker Studio reports) plus scope (signed-in account) and the optional filter. It does not distinguish itself from siblings like list_report_pages or list_datasets, but the resource is named concretely enough that an agent can identify 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?

There is no when-to-use guidance, no mention of alternatives (e.g., list_report_pages for page-level data), and no prerequisites. The agent must infer from the name alone that this is the entry-point listing tool.

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

list_tablesList tables and viewsB
Read-only

List the tables and views of a BigQuery dataset.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYesBigQuery dataset id, e.g. campusfind_analytics
project_idNoGoogle Cloud project id. Defaults to project_id in the config.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds nothing beyond that — no note on whether results are paginated, cached, or scoped by permissions, which for a BigQuery metadata call would be genuine added value.

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 sentence with zero filler, front-loaded with the verb and the scoped resource. Nothing to trim and nothing essential buried.

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?

For a trivial read-only listing tool with two fully documented parameters and annotations covering safety, the description is nearly sufficient. The only minor gap is that no output schema exists, so the return shape (table names, view flags, row counts) is unstated.

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 100%: dataset_id carries a concrete example and project_id documents its config-default behavior. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

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?

Clear verb+resource: 'List the tables and views' names both the operation and the object, and the scope 'of a BigQuery dataset' separates it from list_datasets (project-level) and describe_table (single-table detail). It stops short of explicitly naming those siblings, so it is clear but not fully disambiguating on its own.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as list_datasets or describe_table. Usage is only implied by the listing verb, leaving the agent to infer the call context.

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

run_queryRun a read-only queryA
Read-only

Run one SELECT in GoogleSQL and return the rows as a table. Writes are refused. Use dry_run to check a query and how many bytes it scans before running it.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesA single SELECT (or WITH … SELECT) in GoogleSQL
dry_runNoOnly validate and estimate the bytes scanned
max_rowsNo
project_idNoGoogle Cloud project id. Defaults to project_id in the config.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds genuinely new behavioral facts: writes are refused (an error condition the agent must anticipate), the result arrives as a table, and dry_run provides a cost-estimation path before execution. It stops short of mentioning authentication requirements, row-limit truncation behavior, or quota/cost limits.

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?

Two sentences, both front-loaded with the operative clause ('Run one SELECT…', 'Use dry_run…'), and no filler. The write-refusal safety note is short and appropriately placed second.

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?

With no output schema, the description correctly covers the return shape ('rows as a table'), and read-only semantics are covered jointly by annotations and the write-refusal sentence. The remaining hole is max_rows (what happens past the 10000 cap, truncation vs error) and any auth/project-scoping prerequisites.

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 coverage is 75%, above the low-coverage threshold, so the schema carries most parameter meaning. The description's dry_run sentence largely restates the schema's own 'Only validate and estimate the bytes scanned' and adds nothing about max_rows, the one undocumented parameter (a real gap for controlling result size).

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?

States a specific verb and resource ('Run one SELECT in GoogleSQL'), the cardinality constraint ('one'), and the return shape ('return the rows as a table'). Nothing in the sibling set (list_*/describe_*/screenshot_*/build_report_link) can be confused with executing an arbitrary query, so the boundary is clear without opening schemas.

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?

It gives a workflow hint ('Use dry_run to check a query and how many bytes it scans before running it') but never says when to reach for run_query versus siblings like list_tables or describe_table, nor any exclusions. Usage is only implied by the tool's function.

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

screenshot_reportScreenshot a reportA
Read-only

Take a PNG of a report page in view mode, to check charts after editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page; defaults to the first page
report_idYesReport id or any URL of the report

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare it a safe read operation (readOnlyHint=true, destructiveHint=false). The description adds real value beyond that by specifying the render mode ('view mode') and the output artifact ('PNG'), which matters since no output schema exists. It omits any auth or timing context, keeping it just short of 5.

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 core action and its scope arrive first.

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?

For a simple two-parameter read tool with no output schema, the description conveys the return format (PNG) and the render mode, which is the essential missing piece. Nothing critical for invoking it correctly is absent.

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 100%; both page and report_id are documented in the schema, including the 1-based default and the URL-acceptance behavior. The description adds no parameter detail beyond what the schema already states, so the baseline 3 applies.

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 and resource: capture a PNG of a report page. The 'in view mode' qualifier narrows the action meaningfully. No sibling tool does anything similar (run_query, list_reports, build_report_link), so no differentiation is strictly needed.

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?

'to check charts after editing' implies a usage context, but it is a purpose rationale rather than explicit when-to-use guidance. There is no mention of when not to use it or which alternative to pick for other verification needs.

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. 11 tool updatesv0.1.0
    • First observedbuild_report_link
    • First observedcheck_auth
    • First observeddescribe_component
    • First observeddescribe_table
    • First observedlist_components
    • First observedlist_datasets
    • First observedlist_report_pages
    • First observedlist_reports
    • First observedlist_tables
    • First observedrun_query
    • First observedscreenshot_report

TDQS

A3.6/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct resource+action: BigQuery querying (run_query, list_datasets, list_tables, describe_table) versus Looker Studio browsing (list_reports, list_report_pages, list_components, describe_component, screenshot_report), plus auth and link building. The parallel list/describe hierarchies are clearly separated by domain and no two tools overlap in purpose.

Naming Consistency5/5

All names use a consistent snake_case verb_noun pattern (list_reports, describe_component, run_query, build_report_link, check_auth). There are no mixed conventions or vague verbs, making the naming highly predictable.

Tool Count5/5

11 tools is well within the ideal range and each earns its place: reading BigQuery, reading reports/pages/components, auth checks, and link building. Nothing feels redundant or padded.

Completeness2/5

The surface is read-only yet descriptions reference editing operations that do not exist: describe_component tells you to learn the labels 'update_component' accepts, list_components says 'other component tools take' indexes, and screenshot_report is 'to check charts after editing'. Agents will hit dead ends because the referenced write/edit tools (e.g. update_component, add_component) are absent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLMs to explore BigQuery datasets and tables, run safe read-only queries, and optionally perform vector search using BigQuery embeddings.
    135 PyPI
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and analyze Google BigQuery data, including schema browsing, running queries, and comparing datasets through natural language.
    MIT