Atlas / MCP servers / doitintl / DoiT MCP Server

DoiT MCP ServerCAUTION

mcp/doitintl/doit-mcp-server

DoiT official MCP Server

Verdict
CAUTION
Grade
C
Trust score
78 /100
Exposed tools
44 41r · 2w · 1d
Transport
stdio
License
MIT
Stars
13
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://opensource.org/licenses/MIT)

DoiT MCP Server provides access to the DoiT API. This server enables LLMs like Claude to access DoiT platform data for troubleshooting and analysis.

Authentication

How you authenticate depends on the connection method:

The legacy SSE endpoint (https://mcp.doit.com/sse) is deprecated and should not be used for new setups.

Your DoiT plan must include API access. Tools follow the same permissions as the DoiT API.

Tool results are capped at 140,000 serialized UTF-16 code units after response formatting, including structured content and metadata. Oversized reads return an actionable error; completed writes return a compact success receipt and must not be repeated just to retrieve their output. Errors remain errors. This is a response size policy, not a token limit or a bound on upstream downloads.

Each dispatched call emits a payload-free JSON mcp_tool_response event to stderr on stdio; some clients display these logs. Hosts can supply onResponseMetrics to route the events elsewhere. Use original.serializedChars for response-size percentiles and exceededLimit for over-limit rates; returned measures the result after the guard. Metrics also include UTF-8 byte counts, duration, tool/client

Read from source at commit a7fd67826f68OBSERVED · 2026-10-12
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add doit-mcp-server-integration-tests --env AUTH_SERVER_URL=${AUTH_SERVER_URL} --env DOIT_API_KEY=${DOIT_API_KEY} --env DOIT_OWN_CUSTOMER_API_KEY=${DOIT_OWN_CUSTOMER_API_KEY} -- npx -y @doitintl/[email protected]
claude-desktop
{
  "mcpServers": {
    "doit-mcp-server-integration-tests": {
      "command": "npx",
      "args": [
        "-y",
        "@doitintl/[email protected]"
      ],
      "env": {
        "AUTH_SERVER_URL": "${AUTH_SERVER_URL}",
        "DOIT_API_KEY": "${DOIT_API_KEY}",
        "DOIT_OWN_CUSTOMER_API_KEY": "${DOIT_OWN_CUSTOMER_API_KEY}"
      }
    }
  }
}
03

Exposed tools (44)

41 read · 2 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
AdminreadFull access to all resources.
AnalyticsreadCloud Analytics reports
EditorwriteCan read and modify resources.
EngineeringreadEngineering team costs
FinOpsreadAccess to billing, budgets, and cost reports.
TestreadTest prompt
Trimmedreadtest
ViewerreadRead-only access.
WidgetsreadWidget operations.
__test_args__readTest prompt with required args
__test_multi__readMulti-message test prompt
__test_no_args__readPrompt without arguments
aread
arg1readFirst arg
arg2readSecond arg
bread
barread
cread
change_customerreadUse this when a DoiT employee needs to switch the active customer context for subsequent API calls. Allows switching between different customer accounts. Do NOT use this for regular user operations — this is an internal DoiT employee tool only.
cloud_overviewreadGet a high-level overview dashboard of your entire cloud infrastructure
countread
delete_widgetdestructiveDeletes a widget.
expert_inquiriesreadList recent DoiT expert inquiries, optionally filtered locally by specified criteria
filter_fields_referencereadFilter fields explanation for GCP and AWS resources
flowIDreadFlow ID
fooread
generate_report_commandreadTemplate for generating cost reports
get_widgetreadGet a widget
idreadUser ID
keywordreadKeyword to search for in ticket subject and body
limitreadOptional, number of items
my_new_promptread...
namereadUser name
optread
preadd
payloadread
platformreadOptional, related platform
productreadOptional, related product
read_test_resourcereadTest read
reqread
requestBodyJsonread
search_expert_inquiriesreadSearch DoiT expert inquiries by keyword, optionally filtered by platform and product
statusreadOptional, status (${VALID_TICKET_STATUSES})
trigger_cloudflow_flowwriteTrigger a flow defined in CloudFlow by its flow ID, optionally passing a JSON payload as the request body if the flow requires it
04

Trust audit

CAUTIONgrade C · trust 78/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (3 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (21)

MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
src/utils/__tests__/toolsHandler.test.ts:190
{ token: "00000000-0000-0000-0000-000000000000" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/integration/stdio/approvalFlow.test.ts:75
arguments: { token: "00000000-0000-0000-0000-000000000000" },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/integration/stdio/modern/errorReporting.test.ts:15
const SECRET = "SECRET-ARGUMENT-VALUE";
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_widget
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/release/write-changelog.sh:113
echo "**Full diff:** [\`${range_label}\`](../../compare/${range_label})"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/__tests__/packageExports.test.ts:6
const packageJson = JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8"));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/docs/__tests__/cloudflowGuidance.test.ts:77
const doc = readFileSync(new URL("../../../docs/cloudflow-authoring.md", import.meta.url), "utf8");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/tools/__tests__/accountTeam.test.ts:2
import { makeDoitRequest } from "../../utils/util.js";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/tools/__tests__/accountTeam.test.ts:5
vi.mock("../../utils/util.js", async (importOriginal) => {
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
src/tools/generated/__tests__/refreshGeneratedSpec.test.ts:60
["loopback http URL", "http://127.0.0.1/"],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/integration/process/cloudflowContracts.test.ts:103
DOIT_API_BASE: `http://127.0.0.1:${address.port}`,
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/tools/generated/callOperation.ts:17
const binary = atob(base64);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/utils/util.ts:674
const header = JSON.parse(atob(b64url(parts[0])));
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/utils/util.ts:675
const payload = JSON.parse(atob(b64url(parts[1])));
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/server, dotenv, zod, @readme/openapi-parser, @types/node, openapi-types, shx, typescript
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
test/integration/package.json
@modelcontextprotocol/sdk, @types/node, msw, typescript, vitest
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:15
| Remote (Streamable HTTP) | `https://mcp.doit.com/mcp` | OAuth — your client opens a DoiT sign-in and consent page. Headless clients can instead send a customer personal API token as `Authorization:
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/remote-api-key-bearer-auth.md:75
Any other client that can send a static `Authorization` header to a Streamable HTTP MCP server works the same way. Guidance: create a dedicated API token for the agent, keep it in a secret store, rota
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOInventory / provenance · inv.oversize · CWE-1104
src/tools/generated/openapi.json
src/tools/generated/openapi.json
Why it matters. 7229474 bytes not read
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
<tool:Admin>:1
Full access to all resources.

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha a7fd67826f68full audit observations/trust-audit/mcp-server/doitintl__doit-mcp-server.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-12a7fd67826f68CAUTIONC78first audit
06

Questions

What is the @doitintl/doit-mcp-server MCP server?

DoiT official MCP Server

What tools does @doitintl/doit-mcp-server expose?

44 in total: 41 read-only, 2 that write, and 1 that can delete or overwrite (delete_widget). Every one is listed on this page with its risk.

Is @doitintl/doit-mcp-server safe to connect to an agent?

With care. The audit graded it C (78/100) and found 21 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does @doitintl/doit-mcp-server need?

It reads AUTH_SERVER_URL, DOIT_API_KEY and DOIT_OWN_CUSTOMER_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @doitintl/doit-mcp-server run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @doitintl/doit-mcp-server-integration-tests at 2.4.0.

How current is this page?

The grade is for one exact copy of the source (a7fd67826f68), read on 2026-10-12. The repository is watched and re-audited when it changes.

Advertisement