searchfetch 1.0.2 → 3.0.0

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/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "searchfetch",
3
- "version": "1.0.2",
3
+ "version": "3.0.0",
4
4
  "description": "Fault-tolerant MCP Server for Stealth Web Search and Fetching",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "searchfetch": "./index.js"
8
8
  },
9
9
  "files": [
10
- "index.js"
10
+ "index.js",
11
+ "templates/"
11
12
  ],
12
13
  "publishConfig": {
13
14
  "access": "public"
@@ -18,19 +19,15 @@
18
19
  },
19
20
  "scripts": {
20
21
  "start": "node ./index.js",
21
- "inspector": "npx @modelcontextprotocol/inspector node ./index.js"
22
+ "inspector-js": "npx @modelcontextprotocol/inspector node ./index.js",
23
+ "inspector-py": "npx @modelcontextprotocol/inspector uv run python ./server.py"
22
24
  },
23
25
  "dependencies": {
24
26
  "@modelcontextprotocol/sdk": "^1.29.0",
25
27
  "cheerio": "^1.2.0",
26
- "cloakbrowser": "^0.3.27",
27
- "playwright-core": "^1.59.1",
28
+ "cloakbrowser": "^0.3.31",
29
+ "playwright-core": "^1.60.0",
28
30
  "turndown": "^7.2.4",
29
31
  "zod": "^4.4.3"
30
- },
31
- "devDependencies": {
32
- "@types/cheerio": "^0.22.35",
33
- "@types/node": "^25.6.2",
34
- "@types/turndown": "^5.0.6"
35
32
  }
36
33
  }
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "crates-package",
3
+ "description": "crates.io package page — metadata and README",
4
+ "order": 5,
5
+ "url_patterns": [
6
+ "^https?://crates\\.io/crates/[^/]+/?$",
7
+ "^https?://crates\\.io/crates/[^/]+/[^/]+/?$"
8
+ ],
9
+ "remove": [
10
+ "script",
11
+ "style",
12
+ "svg",
13
+ "nav",
14
+ "footer"
15
+ ],
16
+ "sections": [
17
+ {
18
+ "name": "Crate",
19
+ "selector": "h1",
20
+ "format": "text",
21
+ "required": false
22
+ },
23
+ {
24
+ "name": "Description",
25
+ "selector": "meta[name='description']",
26
+ "format": "attribute",
27
+ "attribute": "content",
28
+ "required": false
29
+ },
30
+ {
31
+ "name": "README",
32
+ "selector": ".crate-readme, #crate-readme, .markdown-body",
33
+ "format": "markdown",
34
+ "required": false
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "docs-page",
3
+ "description": "Documentation page (ReadTheDocs, Sphinx, etc.)",
4
+ "order": 8,
5
+ "url_patterns": [
6
+ "^https?://[^/]+\\.readthedocs\\.io/.*",
7
+ "^https?://[^/]+\\.rtfd\\.io/.*"
8
+ ],
9
+ "remove": [
10
+ "script",
11
+ "style",
12
+ "svg",
13
+ "nav",
14
+ "footer",
15
+ ".sphinxsidebar"
16
+ ],
17
+ "sections": [
18
+ {
19
+ "name": "Title",
20
+ "selector": "h1",
21
+ "format": "text",
22
+ "required": false
23
+ },
24
+ {
25
+ "name": "Content",
26
+ "selector": "[role='main'], .document, .rst-content, article",
27
+ "format": "markdown",
28
+ "required": false
29
+ }
30
+ ]
31
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "duckduckgo-search",
3
+ "description": "DuckDuckGo HTML search results",
4
+ "order": 7,
5
+ "url_patterns": [
6
+ "^https?://html\\.duckduckgo\\.com/html/\\?"
7
+ ],
8
+ "url_template": "https://html.duckduckgo.com/html/?q={query}&kl={kl}&kp={kp}",
9
+ "url_params": {
10
+ "query": {
11
+ "required": true,
12
+ "description": "Search query string",
13
+ "encode": "url"
14
+ },
15
+ "kl": {
16
+ "required": false,
17
+ "default": "wt-wt",
18
+ "description": "Region/language code (e.g., 'us-en', 'de-de', 'wt-wt' for global)"
19
+ },
20
+ "kp": {
21
+ "required": false,
22
+ "default": "-1",
23
+ "description": "Safe search: '-1' moderate, '1' strict, '-2' off"
24
+ }
25
+ },
26
+ "block_resources": [
27
+ "image",
28
+ "media",
29
+ "font",
30
+ "stylesheet"
31
+ ],
32
+ "remove": [
33
+ "script",
34
+ "style",
35
+ "svg",
36
+ "img",
37
+ "nav",
38
+ "footer"
39
+ ],
40
+ "sections": [
41
+ {
42
+ "name": "Results",
43
+ "selector": ".result",
44
+ "multiple": true,
45
+ "max_items": 10,
46
+ "children": [
47
+ {
48
+ "name": "Title",
49
+ "selector": ".result__title a",
50
+ "format": "text"
51
+ },
52
+ {
53
+ "name": "URL",
54
+ "selector": ".result__title a",
55
+ "format": "attribute",
56
+ "attribute": "href",
57
+ "transform": "decode_ddg_url"
58
+ },
59
+ {
60
+ "name": "Snippet",
61
+ "selector": ".result__snippet",
62
+ "format": "text"
63
+ }
64
+ ]
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "github-issue",
3
+ "description": "GitHub issue or pull request",
4
+ "order": 2,
5
+ "url_patterns": [
6
+ "^https?://github\\.com/[^/]+/[^/]+/issues/\\d+/?$",
7
+ "^https?://github\\.com/[^/]+/[^/]+/pull/\\d+/?$"
8
+ ],
9
+ "remove": [
10
+ "script",
11
+ "style",
12
+ "svg",
13
+ ".octicon",
14
+ ".anchor"
15
+ ],
16
+ "sections": [
17
+ {
18
+ "name": "Title",
19
+ "selector": ".js-issue-title",
20
+ "format": "text",
21
+ "required": true
22
+ },
23
+ {
24
+ "name": "State",
25
+ "selector": ".State",
26
+ "format": "text",
27
+ "required": false
28
+ },
29
+ {
30
+ "name": "Author",
31
+ "selector": ".TimelineItem .author",
32
+ "format": "text",
33
+ "required": false
34
+ },
35
+ {
36
+ "name": "Created",
37
+ "selector": ".TimelineItem relative-time",
38
+ "format": "attribute",
39
+ "attribute": "datetime",
40
+ "required": false
41
+ },
42
+ {
43
+ "name": "Body",
44
+ "selector": ".js-discussion .comment-body",
45
+ "format": "markdown",
46
+ "required": false
47
+ },
48
+ {
49
+ "name": "Comments",
50
+ "selector": ".js-discussion .TimelineItem",
51
+ "multiple": true,
52
+ "max_items": 50,
53
+ "children": [
54
+ {
55
+ "name": "Author",
56
+ "selector": ".author",
57
+ "format": "text",
58
+ "required": false
59
+ },
60
+ {
61
+ "name": "Comment",
62
+ "selector": ".comment-body",
63
+ "format": "markdown",
64
+ "required": false
65
+ }
66
+ ]
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "github-repo",
3
+ "description": "GitHub repository root — file listing and README",
4
+ "order": 1,
5
+ "url_patterns": [
6
+ "^https?://github\\.com/[^/]+/[^/]+/?$"
7
+ ],
8
+ "remove": [
9
+ "script",
10
+ "style",
11
+ "svg",
12
+ ".octicon",
13
+ ".anchor"
14
+ ],
15
+ "sections": [
16
+ {
17
+ "name": "Description",
18
+ "selector": "meta[name='description']",
19
+ "format": "attribute",
20
+ "attribute": "content",
21
+ "required": false
22
+ },
23
+ {
24
+ "name": "Files",
25
+ "selector": "table[aria-labelledby='folders-and-files']",
26
+ "format": "markdown",
27
+ "required": false
28
+ },
29
+ {
30
+ "name": "README",
31
+ "selector": "article.markdown-body.entry-content.container-lg",
32
+ "format": "markdown",
33
+ "required": false
34
+ }
35
+ ]
36
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "google-search",
3
+ "description": "Google web search results",
4
+ "order": 6,
5
+ "url_patterns": [
6
+ "^https?://(www\\.)?google\\.[^/]+/search\\?"
7
+ ],
8
+ "url_template": "https://www.google.com/search?udm=14&q={query}&hl={hl}&gl={gl}",
9
+ "url_params": {
10
+ "query": {
11
+ "required": true,
12
+ "description": "Search query string",
13
+ "encode": "url"
14
+ },
15
+ "hl": {
16
+ "required": false,
17
+ "default": "en",
18
+ "description": "Interface language (e.g., 'en', 'de', 'fr', 'ja')"
19
+ },
20
+ "gl": {
21
+ "required": false,
22
+ "default": "us",
23
+ "description": "Country code for result localization (e.g., 'us', 'de', 'jp')"
24
+ }
25
+ },
26
+ "cookies": [
27
+ {
28
+ "name": "CONSENT",
29
+ "value": "YES+cb.20250101-01-p0.en+FX+999",
30
+ "domain": ".google.com",
31
+ "path": "/"
32
+ }
33
+ ],
34
+ "block_resources": [
35
+ "image",
36
+ "media",
37
+ "font",
38
+ "stylesheet"
39
+ ],
40
+ "remove": [
41
+ "script",
42
+ "style",
43
+ "svg",
44
+ "img",
45
+ "nav",
46
+ "footer"
47
+ ],
48
+ "sections": [
49
+ {
50
+ "name": "Results",
51
+ "selector": "div[data-snc]:has(h3), div.g:has(h3), a:has(h3), h3",
52
+ "multiple": true,
53
+ "max_items": 10,
54
+ "children": [
55
+ {
56
+ "name": "Title",
57
+ "selector": "h3, " ,
58
+ "format": "text"
59
+ },
60
+ {
61
+ "name": "URL",
62
+ "selector": "a:has(h3), a",
63
+ "format": "attribute",
64
+ "attribute": "href",
65
+ "transform": "decode_google_url"
66
+ },
67
+ {
68
+ "name": "Snippet",
69
+ "selector": "[data-sncf] span, [data-sncf]",
70
+ "format": "text"
71
+ }
72
+ ]
73
+ }
74
+ ]
75
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "npm-package",
3
+ "description": "npm package page — metadata and README",
4
+ "order": 3,
5
+ "url_patterns": [
6
+ "^https?://(www\\.)?npmjs\\.com/package/[^/]+/?$"
7
+ ],
8
+ "remove": [
9
+ "script",
10
+ "style",
11
+ "svg",
12
+ "nav",
13
+ "footer"
14
+ ],
15
+ "sections": [
16
+ {
17
+ "name": "Package",
18
+ "selector": "h1, h2",
19
+ "format": "text",
20
+ "required": true
21
+ },
22
+ {
23
+ "name": "Version",
24
+ "selector": "[data-testid='package-version']",
25
+ "format": "text",
26
+ "required": false
27
+ },
28
+ {
29
+ "name": "Description",
30
+ "selector": "meta[name='description']",
31
+ "format": "attribute",
32
+ "attribute": "content",
33
+ "required": false
34
+ },
35
+ {
36
+ "name": "Keywords",
37
+ "selector": "[data-testid='keywords'] a",
38
+ "format": "text",
39
+ "required": false,
40
+ "multiple": true
41
+ },
42
+ {
43
+ "name": "README",
44
+ "selector": "#readme",
45
+ "format": "markdown",
46
+ "required": false
47
+ }
48
+ ]
49
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "pypi-package",
3
+ "description": "PyPI package page — metadata and README",
4
+ "order": 4,
5
+ "url_patterns": [
6
+ "^https?://pypi\\.org/project/[^/]+/?$",
7
+ "^https?://pypi\\.org/project/[^/]+/[^/]+/?$"
8
+ ],
9
+ "remove": [
10
+ "script",
11
+ "style",
12
+ "svg",
13
+ "nav",
14
+ "footer"
15
+ ],
16
+ "sections": [
17
+ {
18
+ "name": "Package",
19
+ "selector": "h1.package-header__name",
20
+ "format": "text",
21
+ "required": true
22
+ },
23
+ {
24
+ "name": "Description",
25
+ "selector": "p.package-header__description",
26
+ "format": "text",
27
+ "required": false
28
+ },
29
+ {
30
+ "name": "Metadata",
31
+ "selector": "ul.sidebar-section__list li",
32
+ "format": "text",
33
+ "required": false,
34
+ "multiple": true
35
+ },
36
+ {
37
+ "name": "README",
38
+ "selector": "#description",
39
+ "format": "markdown",
40
+ "required": false
41
+ }
42
+ ]
43
+ }