Skip to main content
Glama
m-murty

Webget MCP

by m-murty

Webget MCP

A Model Context Protocol (MCP) server for Increff Webget — the internal SQL/MongoDB query portal at saas.increff.com/webget.

It lets AI coding agents (Claude Code, opencode, Cursor, Windsurf, etc.) run database queries through Webget directly via natural language, with no manual website clicking, no copy-pasting results, and no UI automation fragility.

You:     "Run this on meeshopackagingcenter: SELECT warehouse_id FROM wms.wms_wms_order WHERE order_id = 43486094"
Agent:   queries Webget through this MCP server → returns the row in chat

Why this exists

Webget website (manual)

webget-mcp

One query

open browser → pick server from 150+ dropdown → type SQL → click Run

say the query

Time per query

~15–30 s of clicking

~0.6 s

Results

rendered HTML table, agent must scrape

clean TSV/JSON text

Auth

re-login when session expires

one Google login, then automatic forever

Related MCP server: database-explorer-mcp

How it works (30-second version)

  1. The first time a tool is called, the server opens a Chrome window with a dedicated persistent profile (~/.webget-mcp/chrome-profile) on the Webget login page.

  2. You log in with Google once in that window. The profile remembers the session.

  3. The server harvests the __Secure_Id_Token_Ref session cookie and stores it in ~/.webget-mcp/auth.json.

  4. Every query after that is a plain HTTPS call — fast, headless, no browser involvement.

  5. If the session cookie ever expires, the server silently re-issues it via the login endpoint (the Chrome profile still has your Google session). Only if the Google session itself dies does the login window appear again — log in once more, done for months.

No passwords or tokens are ever typed into the agent or stored in a repo. Everything lives in your home directory.

Tools provided

Tool

What it does

list_databases

List database servers you can access, with dbId and type (MYSQL/MONGODB)

get_schemas

List schemas (MySQL) or databases (MongoDB) on a server

get_tables

List tables→columns (MySQL) or collections→fields (MongoDB) in a schema

run_query

Execute a SQL or MongoDB query, returns TSV / JSON text

login

Manually trigger the browser login flow (rarely needed — automatic on first call)

Prerequisites

  • Node.js 18 or newer — check with node --version (install from nodejs.org if missing)

  • Google Chrome installed at the default location:

    • macOS: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

    • Linux/Windows: set the WEBGET_CHROME_PATH environment variable (see below)

  • A browser login to Webget that works (i.e. you are authorized on the Webget portal)

Setup

1. Get the code

git clone <your-repo-url> webget-mcp
cd webget-mcp
npm install
npm run build

After the build there is a build/ folder — that is the compiled server. Verify it starts:

node build/index.js

It prints nothing and waits — that is correct, it speaks MCP over stdin/stdout. Press Ctrl+C to stop.

Windows note: run all commands in PowerShell or Git Bash. Replace node build/index.js paths with the absolute path, e.g. C:\Users\you\webget-mcp\build\index.js, in the configs below.

2. Add to your MCP client

Pick the section for your tool. Use the absolute path to wherever you cloned the repo.


Claude Code

claude mcp add webget -- node /absolute/path/to/webget-mcp/build/index.js

Or edit ~/.claude.json"mcpServers":

{
  "mcpServers": {
    "webget": {
      "command": "node",
      "args": ["/absolute/path/to/webget-mcp/build/index.js"]
    }
  }
}

opencode

Edit ~/.config/opencode/opencode.json (or opencode.jsonc), add under "mcp":

{
  "mcp": {
    "webget": {
      "type": "local",
      "command": ["node", "/absolute/path/to/webget-mcp/build/index.js"],
      "enabled": true
    }
  }
}

Cursor

Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "webget": {
      "command": "node",
      "args": ["/absolute/path/to/webget-mcp/build/index.js"]
    }
  }
}

Generic MCP config (Windsurf, VS Code extensions, etc.)

Any client that supports stdio MCP servers:

{
  "mcpServers": {
    "webget": {
      "command": "node",
      "args": ["/absolute/path/to/webget-mcp/build/index.js"]
    }
  }
}

3. First run — the one-time login

  1. Restart your MCP client (Claude Code / opencode / Cursor) so it loads the server.

  2. Ask the agent anything that needs the DB, e.g. "list my webget databases".

  3. A Chrome window opens on the Webget login page. Log in with Google.

  4. The window closes itself within a few seconds. Done.

  5. Ask: "run SELECT 1 on meeshopackagingcenter" — you should get a result in the chat.

From now on the login window only reappears if your Google session fully expires.

Environment variables (optional)

Variable

Default

Purpose

WEBGET_BASE_URL

https://saas.increff.com/webget/in/api

Webget API base URL (change for staging environments)

WEBGET_CHROME_PATH

macOS default Chrome path

Chrome binary location on Linux/Windows

Example with env vars in Claude Code:

claude mcp add webget -e WEBGET_CHROME_PATH=/usr/bin/google-chrome -- node /absolute/path/to/webget-mcp/build/index.js

Usage examples

Ask your agent:

  • "List my webget databases"

  • "What schemas are on meeshopackagingcenter?" (or the dbId)

  • "Show me the tables in the wms schema of meeshopackagingcenter"

  • "Run on meeshopackagingcenter: SELECT channel_order_id FROM wms.wms_wms_order WHERE order_id = 43486094"

MongoDB servers work the same way:

  • "Run on services-prod-mongodb: db.orders.find({status: 'PENDING'}).limit(5)"

Troubleshooting

"Authorization cancelled or failed" / login window never appears The server could not launch Chrome. Check the Chrome path; on non-macOS set WEBGET_CHROME_PATH.

Queries suddenly return auth errors The stored cookie expired and silent re-login failed. Just retry the tool call — it re-harvests automatically. If it keeps failing, run the login tool once.

"Timed out waiting for Webget login" You had 10 minutes to log in and the window was left idle. Retry the call, log in when the window opens.

Port 9222 already in use Another program uses the debugging port. Stop it, or nothing breaks — the server attaches to the existing Chrome if compatible.

Want a clean slate

rm -rf ~/.webget-mcp

Deletes the saved cookie AND the Chrome profile. Next call = fresh login flow.

Security notes

  • Your session cookie is stored only in ~/.webget-mcp/auth.json on your machine — never in a repo, never sent anywhere except saas.increff.com.

  • All queries go through Webget's server-side authorization: you can only reach databases your account already has access to. This MCP adds no privileges.

  • Queries are logged by Webget exactly as if you ran them in the website (same audit trail).

Uninstall

Remove the MCP entry from your client config, then:

rm -rf ~/webget-mcp ~/.webget-mcp

Development

npm install
npm run build     # compile TypeScript → build/
npm run dev       # watch mode

Source layout:

src/
  index.ts            # MCP server entry (stdio)
  auth.ts             # login flow + cookie harvest + persistence
  client.ts           # axios client, auth retry logic
  config.ts          # (reserved)
  tools/
    index.ts          # tool definitions + dispatch
    dbTools.ts        # list_databases, get_schemas, get_tables
    queryTools.ts     # run_query

License

MIT

Available Tools

5 tools
get_schemasA

List schemas (MySQL) or databases (MongoDB) on a server. Use list_databases first to get dbId.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbIdYesDatabase server id from list_databases

TDQS

A4/5.0
Behavior3/5

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

With no annotations available, the description carries the full burden of behavioral disclosure. It does reveal that the tool is list-oriented and that behavior depends on the server type, but it does not mention return format, pagination, permissions, or error conditions. For a simple read-only list operation this is adequate, if minimal.

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 entire description is one sentence with no filler, leading with the core action and then the one prerequisite an agent needs. Every part of the sentence adds value, making it maximally efficient for a single-parameter tool.

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 tool with a single parameter, no annotations, and no output schema, the description adequately conveys the purpose, the precondition for obtaining dbId, and what the return will roughly be (a list of schema/database names). It could be slightly more explicit about the exact return structure, but nothing essential is missing.

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% for the single dbId parameter, with the schema already documenting 'Database server id from list_databases.' The description repeats this dependency almost verbatim, adding no meaningful semantic addition beyond what the schema provides, 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 ('schemas' or 'databases') and clarifies the type-dependent behavior (MySQL vs MongoDB). This clearly distinguishes it from siblings like get_tables and list_databases without needing to inspect the schema.

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 provides clear context by stating the prerequisite: 'Use list_databases first to get dbId.' This tells the agent the preceding step needed to invoke the tool correctly. However, it does not explicitly discuss alternatives or when this tool should not be used, so it stops one step short of a 5.

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

get_tablesA

List tables->columns (MySQL) or collections->fields (MongoDB) in one schema. Returns a map of object name to column/field list.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbIdYesDatabase server id from list_databases
schemaNameYesSchema name from get_schemas

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It reveals engine-specific behavior (MySQL tables vs MongoDB collections) and the exact return shape (a map of object name to column/field list), which makes the tool predictable. It does not discuss errors or authentication, but the listing verb clearly conveys a read-only metadata operation.

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: the first states the core action and engine variants, and the second states the return format. There is no filler, redundancy with the schema, or unnecessary background information.

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

Completeness5/5

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

The tool is simple, the schema fully documents its two parameters, and the description explains the return format in the absence of an output schema. The dual-engine behavior is covered, making it complete enough for an agent to select and invoke the tool correctly.

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 are already fully documented in the input schema, including their provenance from list_databases and get_schemas. The description adds general context about the output being per-schema, but it does not add per-parameter semantics beyond what the schema already provides.

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 states a specific verb ('List'), resource ('tables->columns' or 'collections->fields'), and scope ('in one schema'). It is immediately distinguishable from sibling tools: list_databases lists servers, get_schemas lists schemas, and run_query executes queries.

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 and parameter names imply the intended workflow: use list_databases to get dbId, get_schemas to get schemaName, then this tool to inspect schema structure. It provides clear context but does not explicitly state when not to use it or mention run_query as an alternative for actual data retrieval.

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

list_databasesA

List database servers the user can access, with dbId and dbType (MYSQL or MONGODB).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of conveying behavior. It clearly signals a read-only listing operation limited to databases 'the user can access.' It does not mention pagination, failure modes, or what happens when access is missing, but for a simple no-argument list tool the core behavior is disclosed.

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 that states the action, the restriction, and the output shape. It is front-loaded and contains no filler.

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 zero-parameter tool with no output schema, the description covers the essential return elements (dbId, dbType) and the access scope. It does not explicitly note any dependency on login or how the data connects to follow-on tools, but these are minor gaps in a simple command.

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?

There are zero parameters, and schema description coverage is 100%, so there is no parameter meaning left to add. The baseline of 4 applies because nothing needs clarification.

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 an exact operation ('List') on a specific resource ('database servers the user can access') and enumerates the returned fields (dbId, dbType). This cleanly sets it apart from sibling tools like get_schemas and get_tables, whose names indicate different resources.

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 the tool is for enumerating accessible databases initially, and the sibling names suggest the subsequent steps. However, it never explicitly says 'use this before get_schemas/get_tables' or when not to use it, so the routing logic is only inferred.

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

loginA

Open browser for Webget Google login. Only needed if calls fail with auth errors; normally the first API call auto-triggers this.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses the tool's behavior (opens a browser), the trigger condition, and the fact that it's not normally required. It could mention whether it returns anything or blocks, but given the simplicity of the action, it is sufficiently transparent.

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 with no fluff. The action is stated first, followed by the condition and the normal alternative. Every word adds value.

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

Completeness5/5

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

For a tool with no parameters and no output schema, the description fully covers what the agent needs to know: what it does, when to call it, and when it's unnecessary. Nothing is missing for correct invocation.

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 zero parameters, so the schema is trivially complete. The description adds no parameter semantics because none exist; the baseline of 4 for zero-parameter tools is appropriate.

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 clearly states the action ('Open browser for Webget Google login') and the resource ('Webget Google login'), distinguishing it from sibling database tools. It also mentions the specific condition under which it's needed, making the purpose unambiguous.

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

Usage Guidelines5/5

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

Explicitly states when to use ('Only needed if calls fail with auth errors') and when not to use ('normally the first API call auto-triggers this'), providing clear guidance and an alternative path. This is excellent usage direction.

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

run_queryA

Run a SQL or MongoDB query against a server. MySQL: full SQL, must start with 'use ;' or reference schema-qualified names. Returns TSV text. MongoDB: db.collection.find()/aggregate() style query, returns JSON text.

ParametersJSON Schema
NameRequiredDescriptionDefault
dbIdYesDatabase server id from list_databases
queryYesSQL or MongoDB query text

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden of behavioral disclosure. It usefully discloses return formats (TSV for MySQL, JSON for MongoDB) and the schema-qualification requirement, but it does not mention whether writes are permitted, authentication needs, or error behavior. This is adequate but not comprehensive for a raw-query tool.

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 compact and well-structured: it states the core purpose first, then gives dialect-specific requirements and output formats. Every sentence contributes necessary information without 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?

With no output schema, the description appropriately explains return formats. It also covers the main complexity of the tool, the two query dialects and their syntax constraints. It does not cover side effects or how the server type is determined, but this is a minor gap for a query-execution tool.

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 100%, so the baseline is 3. The description adds meaningful value by explaining what kinds of query text are valid and what the required syntax looks like for each dialect, going beyond the schema's generic 'SQL or MongoDB query text'.

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 action (run a query) and a specific resource (a database server), and immediately distinguishes the two supported dialects: MySQL and MongoDB. Its scope is clearly different from sibling metadata tools like list_databases, get_schemas, and get_tables.

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 gives concrete conditions for both dialects: MySQL queries must start with 'use <schema>;' or use schema-qualified names, and MongoDB queries use db.collection.find()/aggregate() style. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough for an agent to know when this tool is appropriate.

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. 5 tool updatesv1.0.0
    • First observedget_schemas
    • First observedget_tables
    • First observedlist_databases
    • First observedlogin
    • First observedrun_query

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct level of database interaction: servers, schemas, tables, query execution, and authentication. No two tools overlap in purpose, and the descriptions clearly delineate their roles.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (list_databases, get_schemas, get_tables, run_query). The single exception 'login' is a standard verb-only action but does not create confusion, and the overall style is uniform.

Tool Count5/5

Five tools is ideal for a database access server: three for navigation, one for execution, and one for auth. Each tool serves a necessary purpose without redundancy or bloat.

Completeness5/5

The toolset covers the full discovery-to-query workflow across both MySQL and MongoDB. It provides schema enumeration, table/collection inspection, and arbitrary query execution, with login as a fallback for auth. There are no obvious gaps for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact natively with MongoDB databases, including schema discovery, CRUD operations, aggregation pipelines, and index management via natural language.
    28 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to connect to and interact with PostgreSQL, MySQL, SQLite, and MongoDB databases through natural language, supporting schema exploration, query execution, data export, and more.
    13
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely interact with multiple databases (MySQL, PostgreSQL) via natural language queries, with cross-database querying and enterprise-grade security.
    8 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with PostgreSQL or MySQL databases using natural language. Supports SQL queries, schema discovery, and pre-built aggregations without writing SQL.
    191 npm
    MIT