skim-mcp 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -3
- package/dist/index.js +10 -10
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
# skim-mcp
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Skim turns URLs into clean markdown for agents. Get a free card key at [https://skim402.com](https://skim402.com) (`sk402_`). Wallet/x402 is optional.**
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/skim-mcp)
|
|
6
6
|
[](https://registry.modelcontextprotocol.io/v0/servers?search=skim402)
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
|
|
9
|
-
`skim-mcp` is the official Model Context Protocol server for [Skim](https://skim402.com)
|
|
9
|
+
`skim-mcp` is the official Model Context Protocol server for [Skim](https://skim402.com). It turns any URL into clean, agent-ready Markdown (no ads, no nav, no boilerplate).
|
|
10
|
+
|
|
11
|
+
**Default path: a card-plan API key.** Get a free `sk402_` key at [skim402.com](https://skim402.com) ([pricing](https://skim402.com/pricing)). Paste it as `SKIM_API_KEY`. A crypto wallet is **not** required.
|
|
12
|
+
|
|
13
|
+
**Optional path: x402 wallet pay.** If you prefer pay-per-call in USDC on Base, you can set `SKIM_WALLET_PRIVATE_KEY` instead. Ignore this unless you want it.
|
|
14
|
+
|
|
15
|
+
**Tools in this package:** `read_url`, `read_urls`, `extract_url`, `crawl_url`, `read_pdf`, `watch_urls`, `check_watch`, `poll_signal`.
|
|
10
16
|
|
|
11
17
|
> **See it before you wire it:** [try Skim free in your browser](https://freeskims.skim402.com) — 10 free skims a day, no signup. Paste a URL, see exactly what your agent gets back.
|
|
12
18
|
|
|
@@ -74,6 +80,19 @@ Fund a dedicated Base wallet with a small USDC balance ($1 ≈ 500 reads). Full
|
|
|
74
80
|
|
|
75
81
|
---
|
|
76
82
|
|
|
83
|
+
## FAQ
|
|
84
|
+
|
|
85
|
+
**Do I need an API key?**
|
|
86
|
+
Yes for the default path. Get a free `sk402_` key at [https://skim402.com](https://skim402.com). A wallet is optional.
|
|
87
|
+
|
|
88
|
+
**Is this wallet-only? Do I need crypto?**
|
|
89
|
+
No. Card API key is the default. x402 wallet pay is optional.
|
|
90
|
+
|
|
91
|
+
**What tools can my agent call?**
|
|
92
|
+
`read_url`, `read_urls` (batch), `extract_url`, `crawl_url`, `read_pdf`, `watch_urls`, `check_watch`, and `poll_signal`.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
77
96
|
## Try it without an agent
|
|
78
97
|
|
|
79
98
|
Test the endpoint directly. With a card key:
|
|
@@ -181,12 +200,19 @@ Card-lane `/api/t/watch*` is live (POST without a key returns `401`). Optional H
|
|
|
181
200
|
|
|
182
201
|
Poll a [Skim Signal](https://skim402.com/signals) and return the latest structured items (title, summary, source, timestamp, link, and entities). **2 credits** per successful poll; failed polls are refunded.
|
|
183
202
|
|
|
184
|
-
**Requires `SKIM_API_KEY`.**
|
|
203
|
+
**Requires `SKIM_API_KEY`.** Wallet-only configs get a clear error: the live `GET /api/v2/...` wallet twin uses a v2 402 with an empty body, which the current `x402-fetch` wrapper does not handle.
|
|
185
204
|
|
|
186
205
|
**Input:** `{ "slug": "ai-news", "limit": 20 }`
|
|
187
206
|
|
|
188
207
|
Optional documented filters: `forms` (SEC filings and campaign finance), `categories` (deals), `fields` (research), `states` (film incentives), and `committees` (campaign finance).
|
|
189
208
|
|
|
209
|
+
**Routes (API key):** `GET /api/t/signal/{slug}/latest?limit=` · `GET /api/t/feeds/x402/latest?limit=` (x402 is not `/signal/x402`)
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
curl -H 'Authorization: Bearer sk402_your_key_here' \
|
|
213
|
+
'https://skim402.com/api/t/signal/ai-news/latest?limit=20'
|
|
214
|
+
```
|
|
215
|
+
|
|
190
216
|
```
|
|
191
217
|
Poll the ai-news Signal for the latest 20 items.
|
|
192
218
|
```
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { privateKeyToAccount } from "viem/accounts";
|
|
5
5
|
import { wrapFetchWithPayment } from "x402-fetch";
|
|
6
6
|
import { z } from "zod";
|
|
7
|
-
const VERSION = "0.2.
|
|
7
|
+
const VERSION = "0.2.5";
|
|
8
8
|
const BASE_URL = (process.env.SKIM_API_URL ?? "https://skim402.com").replace(/\/+$/, "");
|
|
9
9
|
const API_KEY = process.env.SKIM_API_KEY ?? "";
|
|
10
10
|
const PRIVATE_KEY = process.env.SKIM_WALLET_PRIVATE_KEY ?? "";
|
|
@@ -493,19 +493,19 @@ server.tool("check_watch", "Poll a Skim Watch for content changes (or fetch regi
|
|
|
493
493
|
return fail(requestFailedMessage(err));
|
|
494
494
|
}
|
|
495
495
|
});
|
|
496
|
-
server.tool("poll_signal", "Poll a Skim Signal feed and return the latest structured items. 2 credits per successful poll; failed polls are refunded.
|
|
497
|
-
slug: z.enum(SIGNAL_SLUGS).describe("Signal slug. Use x402 for the ecosystem feed."),
|
|
498
|
-
limit: z.number().int().min(1).max(100).optional().describe("Max items, newest
|
|
499
|
-
forms: z.string().optional().describe("Comma-separated form filter
|
|
500
|
-
categories: z.string().optional().describe("Comma-separated category
|
|
501
|
-
fields: z.string().optional().describe("Comma-separated arXiv
|
|
502
|
-
states: z.string().optional().describe("Comma-separated two-letter
|
|
503
|
-
committees: z.string().optional().describe("Comma-separated committee-name
|
|
496
|
+
server.tool("poll_signal", "Poll a Skim Signal feed and return the latest structured items (title, summary, source, timestamp, link, entities). 2 credits per successful poll; failed polls are refunded. Card lane: GET /api/t/signal/{slug}/latest?limit= (filters: forms, categories, fields, states, committees). The x402 ecosystem feed is GET /api/t/feeds/x402/latest — never /signal/x402. Requires SKIM_API_KEY. No x402-fetch-compatible wallet twin (GET /api/v2/... returns a v2 402 with an empty body).", {
|
|
497
|
+
slug: z.enum(SIGNAL_SLUGS).describe("Signal slug from skim402.com/signals. Use x402 for the ecosystem feed, not /signal/x402."),
|
|
498
|
+
limit: z.number().int().min(1).max(100).optional().describe("Max items, newest-first. Default 50, capped at 100."),
|
|
499
|
+
forms: z.string().optional().describe("Comma-separated form filter. sec-filings: 8-K, S-1, 10-K, 10-Q, SC 13D, SC 13G, 4. campaign-finance: F1, F2, F3, F3P, F3X, F3L, F24, F5, F6, F9, F13, F99."),
|
|
500
|
+
categories: z.string().optional().describe("deals only. Comma-separated category terms (1–8, each 2–40 chars), e.g. laptop,gpu."),
|
|
501
|
+
fields: z.string().optional().describe("research only. Comma-separated arXiv fields: ai, ml, nlp, vision, robotics, agents, security, quantum."),
|
|
502
|
+
states: z.string().optional().describe("film-incentives only. Comma-separated two-letter states: CA, NY, GA, NM, TX."),
|
|
503
|
+
committees: z.string().optional().describe("campaign-finance only. Comma-separated committee-name substrings (1–8, each 2–60 chars), e.g. turning point,dnc."),
|
|
504
504
|
}, async ({ slug, limit, forms, categories, fields, states, committees }) => {
|
|
505
505
|
if (!hasAuth)
|
|
506
506
|
return authMissing();
|
|
507
507
|
if (!cardLane) {
|
|
508
|
-
return fail("poll_signal is card-lane only
|
|
508
|
+
return fail("poll_signal is card-lane only (GET /api/t/signal/{slug}/latest or GET /api/t/feeds/x402/latest) — set SKIM_API_KEY (sk402_..., free tier at skim402.com/pricing). The wallet twin returns a v2 402 with an empty body, which the existing x402-fetch wrapper does not handle.");
|
|
509
509
|
}
|
|
510
510
|
try {
|
|
511
511
|
const query = {};
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skim-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"mcpName": "io.github.JessieJanie/skim402",
|
|
5
|
-
"description": "MCP server for Skim —
|
|
5
|
+
"description": "MCP server for Skim — URLs to clean markdown. Card API key (sk402_) default; wallet/x402 optional. Batch, extract, crawl, PDF, watch, signals.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"skim-mcp": "dist/index.js"
|