Webget MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Webget MCPrun SELECT order_id FROM wms_wms_order WHERE order_id = 43486094 on meeshopackagingcenter"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 chatWhy 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)
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.You log in with Google once in that window. The profile remembers the session.
The server harvests the
__Secure_Id_Token_Refsession cookie and stores it in~/.webget-mcp/auth.json.Every query after that is a plain HTTPS call — fast, headless, no browser involvement.
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 database servers you can access, with |
| List schemas (MySQL) or databases (MongoDB) on a server |
| List tables→columns (MySQL) or collections→fields (MongoDB) in a schema |
| Execute a SQL or MongoDB query, returns TSV / JSON text |
| 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 ChromeLinux/Windows: set the
WEBGET_CHROME_PATHenvironment 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 buildAfter the build there is a build/ folder — that is the compiled server. Verify it starts:
node build/index.jsIt 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.jspaths 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.jsOr 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
Restart your MCP client (Claude Code / opencode / Cursor) so it loads the server.
Ask the agent anything that needs the DB, e.g. "list my webget databases".
A Chrome window opens on the Webget login page. Log in with Google.
The window closes itself within a few seconds. Done.
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 API base URL (change for staging environments) |
| 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.jsUsage 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-mcpDeletes the saved cookie AND the Chrome profile. Next call = fresh login flow.
Security notes
Your session cookie is stored only in
~/.webget-mcp/auth.jsonon your machine — never in a repo, never sent anywhere exceptsaas.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-mcpDevelopment
npm install
npm run build # compile TypeScript → build/
npm run dev # watch modeSource 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_queryLicense
MIT
Available Tools
5 toolsget_schemasA
List schemas (MySQL) or databases (MongoDB) on a server. Use list_databases first to get dbId.
| Name | Required | Description | Default |
|---|---|---|---|
| dbId | Yes | Database server id from list_databases |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dbId | Yes | Database server id from list_databases | |
| schemaName | Yes | Schema name from get_schemas |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dbId | Yes | Database server id from list_databases | |
| query | Yes | SQL or MongoDB query text |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v1.0.0- First observed
get_schemas - First observed
get_tables - First observed
list_databases - First observed
login - First observed
run_query
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Let AI agents query data and act across all your business apps via MCP.
Direct access to 60+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Query BigQuery, Snowflake, Redshift & Azure Synapse with natural language
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact natively with MongoDB databases, including schema discovery, CRUD operations, aggregation pipelines, and index management via natural language.28 npmMIT
- AlicenseAqualityDmaintenanceEnables 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.13MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely interact with multiple databases (MySQL, PostgreSQL) via natural language queries, with cross-database querying and enterprise-grade security.8 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT