obscura-mcp-server 0.1.1 → 0.1.2

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/INSTALL.md CHANGED
@@ -13,7 +13,7 @@ Once published to npm:
13
13
  "mcpServers": {
14
14
  "obscura": {
15
15
  "command": "bunx",
16
- "args": ["obscura-mcp-server"]
16
+ "args": ["-y", "obscura-mcp-server"]
17
17
  }
18
18
  }
19
19
  }
@@ -89,7 +89,7 @@ bun install
89
89
  "servers": {
90
90
  "obscura": {
91
91
  "command": "bunx",
92
- "args": ["obscura-mcp-server"]
92
+ "args": ["-y", "obscura-mcp-server"]
93
93
  }
94
94
  }
95
95
  }
@@ -114,7 +114,7 @@ Restart VSCode after editing.
114
114
  "obscura": {
115
115
  "type": "stdio",
116
116
  "command": "bunx",
117
- "args": ["obscura-mcp-server"]
117
+ "args": ["-y", "obscura-mcp-server"]
118
118
  }
119
119
  }
120
120
  }
@@ -150,7 +150,7 @@ Cursor also supports UI configuration: Settings → Features → Model Context P
150
150
  "mcp": {
151
151
  "obscura": {
152
152
  "type": "local",
153
- "command": ["bunx", "obscura-mcp-server"],
153
+ "command": ["bunx", "-y", "obscura-mcp-server"],
154
154
  "environment": {
155
155
  "OBSCURA_PATH": "/usr/local/bin/obscura"
156
156
  },
@@ -175,7 +175,7 @@ Cursor also supports UI configuration: Settings → Features → Model Context P
175
175
  "mcpServers": {
176
176
  "obscura": {
177
177
  "command": "bunx",
178
- "args": ["obscura-mcp-server"]
178
+ "args": ["-y", "obscura-mcp-server"]
179
179
  }
180
180
  }
181
181
  }
@@ -202,7 +202,7 @@ claude mcp list
202
202
  "mcpServers": {
203
203
  "obscura": {
204
204
  "command": "bunx",
205
- "args": ["obscura-mcp-server"]
205
+ "args": ["-y", "obscura-mcp-server"]
206
206
  }
207
207
  }
208
208
  }
@@ -227,7 +227,7 @@ Then configure the adapter to point to the Obscura MCP server:
227
227
  "mcpServers": {
228
228
  "obscura": {
229
229
  "command": "bunx",
230
- "args": ["obscura-mcp-server"]
230
+ "args": ["-y", "obscura-mcp-server"]
231
231
  }
232
232
  }
233
233
  }
package/README.md CHANGED
@@ -47,7 +47,7 @@ Add to your MCP servers config:
47
47
  "mcpServers": {
48
48
  "obscura": {
49
49
  "command": "bunx",
50
- "args": ["obscura-mcp-server"]
50
+ "args": ["-y", "obscura-mcp-server"]
51
51
  }
52
52
  }
53
53
  }
package/bun.lock CHANGED
@@ -15,6 +15,7 @@
15
15
  "@biomejs/biome": "^2.4.13",
16
16
  "@types/bun": "latest",
17
17
  "@types/turndown": "^5.0.6",
18
+ "lefthook": "^2.1.6",
18
19
  },
19
20
  "peerDependencies": {
20
21
  "typescript": "^6.0.3",
@@ -172,6 +173,28 @@
172
173
 
173
174
  "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="],
174
175
 
176
+ "lefthook": ["lefthook@2.1.6", "", { "optionalDependencies": { "lefthook-darwin-arm64": "2.1.6", "lefthook-darwin-x64": "2.1.6", "lefthook-freebsd-arm64": "2.1.6", "lefthook-freebsd-x64": "2.1.6", "lefthook-linux-arm64": "2.1.6", "lefthook-linux-x64": "2.1.6", "lefthook-openbsd-arm64": "2.1.6", "lefthook-openbsd-x64": "2.1.6", "lefthook-windows-arm64": "2.1.6", "lefthook-windows-x64": "2.1.6" }, "bin": { "lefthook": "bin/index.js" } }, "sha512-w9sBoR0mdN+kJc3SB85VzpiAAl451/rxdCRcZlwW71QLjkeH3EBQFgc4VMj5apePychYDHAlqEWTB8J8JK/j1Q=="],
177
+
178
+ "lefthook-darwin-arm64": ["lefthook-darwin-arm64@2.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hyB7eeiX78BS66f70byTJacDLC/xV1vgMv9n+idFUsrM7J3Udd/ag9Ag5NP3t0eN0EqQqAtrNnt35EH01lxnRQ=="],
179
+
180
+ "lefthook-darwin-x64": ["lefthook-darwin-x64@2.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-5Ka6cFxiH83krt+OMRQtmS6zqoZR5SLXSudLjTbZA1c3ZqF0+dqkeb4XcB6plx6WR0GFizabuc6Bi3iXPIe1eQ=="],
181
+
182
+ "lefthook-freebsd-arm64": ["lefthook-freebsd-arm64@2.1.6", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-VswyOg5CVN3rMaOJ2HtnkltiMKgFHW/wouWxXsV8RxSa4tgWOKxM0EmSXi8qc2jX+LRga6B0uOY6toXS01zWxA=="],
183
+
184
+ "lefthook-freebsd-x64": ["lefthook-freebsd-x64@2.1.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-vXsCUFYuVwrVWwcypB7Zt2Hf+5pl1V1la7ZfvGYZaTRURu0zF/XUnMF/nOz/PebGv0f4x/iOWXWwP7E42xRWsg=="],
185
+
186
+ "lefthook-linux-arm64": ["lefthook-linux-arm64@2.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-WDJiQhJdZOvKORZd+kF/ms2l6NSsXzdA9ahflyr65V90AC4jES223W8VtEMbGPUtHuGWMEZ/v/XvwlWv0Ioz9g=="],
187
+
188
+ "lefthook-linux-x64": ["lefthook-linux-x64@2.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-C18nCd7nTX1AVL4TcvwMmLAO1VI1OuGluIOTjiPkBQ746Ls1HhL5rl//jMPACmT28YmxIQJ2ZcLPNmhvEVBZvw=="],
189
+
190
+ "lefthook-openbsd-arm64": ["lefthook-openbsd-arm64@2.1.6", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-mZOMxM8HiPxVFXDO3PtCUbH4GB8rkveXhsgXF27oAZTYVzQ3gO9vT6r/pxit6msqRXz3fvcwimLVJgb8eRsa8A=="],
191
+
192
+ "lefthook-openbsd-x64": ["lefthook-openbsd-x64@2.1.6", "", { "os": "openbsd", "cpu": "x64" }, "sha512-sG9ALLZSnnMOfXu+B7SmxFhJhuoAh4bqi5En5aaHJET48TqrLOcWWZuH+7ArFM6gr/U5KfSUvdmHFmY8WqCcIg=="],
193
+
194
+ "lefthook-windows-arm64": ["lefthook-windows-arm64@2.1.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-lD8yFWY4Csuljd0Rqs7EQaySC0VvDf7V3rN1FhRMUISTRDHutebIom1Loc8ckQPvKYGC6mftT9k0GvipsS+Brw=="],
195
+
196
+ "lefthook-windows-x64": ["lefthook-windows-x64@2.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-q4z2n3xucLscoWiyMwFViEj3N8MDSkPulMwcJYuCYFHoPhP1h+icqNu7QRLGYj6AnVrCQweiUJY3Tb2X+GbD/A=="],
197
+
175
198
  "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
176
199
 
177
200
  "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="],
package/dist/index.js CHANGED
@@ -52886,7 +52886,7 @@ async function queryWithObscura(url2, options) {
52886
52886
  const allElements = root.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li, a, span, div");
52887
52887
  const allText = allElements.map((el) => el.text.trim()).filter((t) => t.length > 0);
52888
52888
  const fuse = new Fuse(allText, { threshold: 0.3 });
52889
- const matches = fuse.search(text);
52889
+ const matches = fuse.search(text || "").slice(0, 10);
52890
52890
  return {
52891
52891
  content: [
52892
52892
  {
@@ -53103,7 +53103,7 @@ function registerTools(server) {
53103
53103
  // src/index.ts
53104
53104
  var server = new McpServer({
53105
53105
  name: "obscura-mcp-server",
53106
- version: "0.1.0"
53106
+ version: "0.1.2"
53107
53107
  });
53108
53108
  registerTools(server);
53109
53109
  var transport = new StdioServerTransport;
package/lefthook.yml ADDED
@@ -0,0 +1,11 @@
1
+ pre-commit:
2
+ commands:
3
+ lint-fix:
4
+ run: bun biome check --write {staged_files}
5
+ glob: "**/*.{ts,tsx,js,jsx,json}"
6
+
7
+ pre-push:
8
+ commands:
9
+ lint-check:
10
+ run: bun biome check
11
+ glob: "**/*.{ts,tsx,js,jsx,json}"
package/package.json CHANGED
@@ -1,8 +1,16 @@
1
1
  {
2
2
  "name": "obscura-mcp-server",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "private": false,
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/sthbryan/obscura-mcp-server"
9
+ },
10
+ "author": {
11
+ "name": "sthbryan",
12
+ "url": "https://justcallmebryan.com"
13
+ },
6
14
  "description": "MCP server for Obscura - web scraping, HTML to Markdown conversion, and URL content processing",
7
15
  "main": "./dist/index.js",
8
16
  "bin": {
@@ -15,12 +23,14 @@
15
23
  "lint": "biome check .",
16
24
  "lint:fix": "biome check --write .",
17
25
  "check": "biome check --diagnostic-level=error .",
18
- "prepublish": "bun run build"
26
+ "prepublish": "bun run build",
27
+ "postinstall": "[ -d .git ] && lefthook install || true"
19
28
  },
20
29
  "devDependencies": {
21
30
  "@biomejs/biome": "^2.4.13",
22
31
  "@types/bun": "latest",
23
- "@types/turndown": "^5.0.6"
32
+ "@types/turndown": "^5.0.6",
33
+ "lefthook": "^2.1.6"
24
34
  },
25
35
  "peerDependencies": {
26
36
  "typescript": "^6.0.3"
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@ import { registerTools } from "./tools";
5
5
 
6
6
  const server = new McpServer({
7
7
  name: "obscura-mcp-server",
8
- version: "0.1.0",
8
+ version: "0.1.2",
9
9
  });
10
10
 
11
11
  registerTools(server);
@@ -40,4 +40,4 @@ export function createFetchHandler() {
40
40
  };
41
41
  }
42
42
  };
43
- }
43
+ }
@@ -29,10 +29,7 @@ function findBestSelector(html: string): string {
29
29
  return DEFAULT_CONTENT_SELECTORS;
30
30
  }
31
31
 
32
- export async function queryWithNative(
33
- url: string,
34
- options: QueryOptions
35
- ): Promise<CallToolResult> {
32
+ export async function queryWithNative(url: string, options: QueryOptions): Promise<CallToolResult> {
36
33
  const { selector, text } = options;
37
34
 
38
35
  if (!selector && !text) {
@@ -73,11 +70,11 @@ export async function queryWithNative(
73
70
 
74
71
  const html = await response.text();
75
72
  let resolvedSelector = selector;
76
-
73
+
77
74
  if (!resolvedSelector) {
78
75
  resolvedSelector = text ? DEFAULT_CONTENT_SELECTORS : findBestSelector(html);
79
76
  }
80
-
77
+
81
78
  const result = parseHtml(html, { selector: resolvedSelector, text });
82
79
 
83
80
  return {
@@ -137,4 +134,4 @@ function parseHtml(html: string, options: { selector?: string; text?: string }):
137
134
  }
138
135
 
139
136
  return [];
140
- }
137
+ }
@@ -63,4 +63,4 @@ export function createQueryHandler() {
63
63
  };
64
64
  }
65
65
  };
66
- }
66
+ }
@@ -1,6 +1,6 @@
1
1
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types";
2
- import { parse } from "node-html-parser";
3
2
  import Fuse from "fuse.js";
3
+ import { parse } from "node-html-parser";
4
4
  import { execAsync } from "@/utils/exec";
5
5
 
6
6
  interface QueryOptions {
@@ -79,7 +79,7 @@ export async function queryWithObscura(
79
79
  const allText = allElements.map((el) => el.text.trim()).filter((t) => t.length > 0);
80
80
 
81
81
  const fuse = new Fuse(allText, { threshold: 0.3 });
82
- const matches = fuse.search(text!);
82
+ const matches = fuse.search(text || "").slice(0, 10);
83
83
 
84
84
  return {
85
85
  content: [
@@ -100,4 +100,4 @@ export async function queryWithObscura(
100
100
  },
101
101
  ],
102
102
  };
103
- }
103
+ }
@@ -40,4 +40,4 @@ export function createSearchHandler() {
40
40
  };
41
41
  }
42
42
  };
43
- }
43
+ }
@@ -1,25 +0,0 @@
1
- # .specs/config.yaml — project-wide spec workflow config (free-form, agent-interpreted)
2
- #
3
- # This file is read at the start of every spec workflow action (brainstorm,
4
- # spec init, status, validate, task check, implementation). Edits take effect
5
- # on the next action. The schema is intentionally free-form: any keys you add
6
- # are surfaced to the spec agent as project context.
7
-
8
- project:
9
- goal: "Short statement of what this project is for."
10
- tech_stack:
11
- - "language/runtime"
12
- - "framework"
13
- - "datastore"
14
-
15
- principles:
16
- tdd: false # write tests first when true
17
- no_comments: false # omit code comments when true
18
- # add any other principles your team wants the agent to honor
19
-
20
- hooks:
21
- after_task:
22
- - command: "npm test"
23
- auto: false # true = agent runs it after each task; false = remind the user
24
- # - command: "npm run lint"
25
- # auto: true