Sign In

@stackscan/mcp-server

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@stackscan/mcp-server - npm Package Compare versions

Comparing version
0.1.0
to
0.1.1
+5
-5
build/index.js

@@ -106,3 +106,3 @@ #!/usr/bin/env node

// A bot-protection interstitial is HTML, not JSON, and is by far the most
// likely cause of a non-JSON reply — the edge blocks non-browser TLS
// likely cause of a non-JSON reply: the edge blocks non-browser TLS
// fingerprints before the request ever reaches StackScan. Say so, because

@@ -122,3 +122,3 @@ // "non-JSON 403" sends people hunting for a bug in their token.

if (response.ok) {
// A miss arrives as 200 {success: false, error: "..."} — not a 404.
// A miss arrives as 200 {success: false, error: "..."}, not a 404.
if (body.success === false) {

@@ -207,3 +207,3 @@ return {

inputSchema: {
domain: z.string().describe("Bare domain, e.g. shopify.com (no scheme, no path)"),
domain: z.string().describe("Bare domain, e.g. example.com (no scheme, no path)"),
},

@@ -240,3 +240,3 @@ }, async ({ domain }) => {

inputSchema: {
domain: z.string().describe("Bare domain, e.g. shopify.com (no scheme, no path)"),
domain: z.string().describe("Bare domain, e.g. example.com (no scheme, no path)"),
limit: z.number().int().min(1).max(50).optional().describe("Max technologies to return (default 25, cap 50)"),

@@ -316,3 +316,3 @@ },

.max(BATCH_MAX)
.describe(`Bare domains, e.g. ["shopify.com","stripe.com"]. Maximum ${BATCH_MAX}.`),
.describe(`Bare domains, e.g. ["example.com","stripe.com"]. Maximum ${BATCH_MAX}.`),
},

@@ -319,0 +319,0 @@ }, async ({ domains }) => {

{
"name": "@stackscan/mcp-server",
"version": "0.1.0",
"version": "0.1.1",
"description": "MCP server for the StackScan Tech Lookup API - look up the technology stack and the company behind any domain.",

@@ -52,2 +52,2 @@ "keywords": [

}
}
}
+11
-11

@@ -9,5 +9,5 @@ # StackScan MCP server

> What is shopify.com built on?
> What is example.com built on?
>
> Who's behind vercel.com — where are they, what industry, what's their LinkedIn?
> Who's behind vercel.com? Where are they, what industry, what's their LinkedIn?
>

@@ -57,3 +57,3 @@ > How many sites run Klaviyo, and in which countries?

Same shape — `command: npx`, `args: ["-y", "@stackscan/mcp-server"]`, and the two
Same shape: `command: npx`, `args: ["-y", "@stackscan/mcp-server"]`, and the two
environment variables. Check your client's own MCP docs for where its config file lives.

@@ -79,3 +79,3 @@

deliberately does not. A tool result goes straight into the model's context, and a
hundred full company payloads is tens of thousands of tokens — it crowds out the
hundred full company payloads is tens of thousands of tokens, which crowds out the
conversation you are actually having, and the model then has to re-read all of it

@@ -85,3 +85,3 @@ to answer anything. Twenty compact rows is a table a model can reason over.

It also refuses rather than truncates. If a batch would cost more than your session
cap allows, it charges nothing and tells you how many you can afford — quietly
cap allows, it charges nothing and tells you how many you can afford. Quietly
dropping domains would hand back an answer that looks complete and is not.

@@ -98,4 +98,4 @@

|---|---|---|---|
| `STACKSCAN_API_TOKEN` | yes | — | Dashboard → API Tokens |
| `STACKSCAN_TENANT_ID` | yes | — | Your workspace UUID, same page |
| `STACKSCAN_API_TOKEN` | yes | none | Dashboard → API Tokens |
| `STACKSCAN_TENANT_ID` | yes | none | Your workspace UUID, same page |
| `STACKSCAN_API_BASE` | no | `https://api.stackscan.com` | Rarely needed |

@@ -106,3 +106,3 @@ | `STACKSCAN_SESSION_LOOKUP_CAP` | no | `25` | See below |

StackScan's own limit is a **rate** limit — requests per minute. That stops a burst. It
StackScan's own limit is a **rate** limit: requests per minute. That stops a burst. It
does nothing to stop a patient agent quietly spending an entire credit balance over an

@@ -117,3 +117,3 @@ afternoon, which is a failure mode humans clicking buttons do not have.

Raise it deliberately if you mean to — `"STACKSCAN_SESSION_LOOKUP_CAP": "200"` — rather
If you mean to go higher, raise it deliberately (`"STACKSCAN_SESSION_LOOKUP_CAP": "200"`) rather
than finding out afterwards.

@@ -154,3 +154,3 @@

**Cached responses are still charged.** The API's response cache shields its database,
not your wallet — a repeat lookup inside the cache window costs the same credit. That is
not your wallet: a repeat lookup inside the cache window costs the same credit. That is
why the local balance decrements on every hit instead of trying to guess which calls

@@ -175,3 +175,3 @@ were free.

The licence covers this client only — roughly 500 lines that make HTTP requests.
The licence covers this client only, roughly 500 lines that make HTTP requests.
The StackScan data it reaches is a paid service and is not covered by it.