awesome-lite-mcp 0.1.0 → 0.1.1

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.
Files changed (2) hide show
  1. package/package.json +11 -4
  2. package/server.mjs +13 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "awesome-lite-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Offline search over the awesome list ecosystem: 9k+ curated entries from 12 lists, as an MCP server plus a CLI. Zero dependencies.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,10 +27,17 @@
27
27
  "cli"
28
28
  ],
29
29
  "license": "MIT",
30
- "engines": { "node": ">=18" },
31
- "repository": { "type": "git", "url": "git+https://github.com/Verchiel666/awesome-lite.git" },
30
+ "engines": {
31
+ "node": ">=18"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/Verchiel666/awesome-lite.git"
36
+ },
32
37
  "homepage": "https://github.com/Verchiel666/awesome-lite#readme",
33
- "bugs": { "url": "https://github.com/Verchiel666/awesome-lite/issues" },
38
+ "bugs": {
39
+ "url": "https://github.com/Verchiel666/awesome-lite/issues"
40
+ },
34
41
  "scripts": {
35
42
  "sync": "node cli.mjs sync",
36
43
  "search": "node cli.mjs search",
package/server.mjs CHANGED
@@ -59,6 +59,12 @@ const TOOLS = [
59
59
  ];
60
60
 
61
61
  const tagOf = (repo) => (loadLists().find(l => l.repo === repo) || {}).tag || '';
62
+ const fmtText = (rows) => rows.map((r, i) => {
63
+ const parts = [r.tag || r.list, r.category].filter(Boolean);
64
+ const where = parts.length ? ' [' + parts.join(' / ') + ']' : '';
65
+ const desc = (r.desc || '').replace(/\s+/g, ' ').slice(0, 180);
66
+ return `${i + 1}. ${r.name}${where}\n ${r.url}${desc ? '\n ' + desc : ''}`;
67
+ }).join('\n');
62
68
  const fmt = (e) => ({ name: e.name, url: e.url, desc: e.desc, list: e.list, tag: tagOf(e.list), category: e.category, score: e.score });
63
69
 
64
70
  async function callTool(name, args = {}) {
@@ -76,8 +82,11 @@ async function callTool(name, args = {}) {
76
82
  if (name === 'awesome_search') {
77
83
  const limit = Math.min(Number(args.limit) || 10, 50);
78
84
  const hits = search(idx, args.query || '', { limit, list: args.list || '', all: !!args.all });
85
+ const head = hits.length
86
+ ? `「${args.query}」命中 ${hits.length} 条(索引 ${idx.entries.length} 条)\n`
87
+ : `「${args.query}」无命中(索引 ${idx.entries.length} 条);换关键词,或 awesome_sync 刷新后重试`;
79
88
  return {
80
- content: [{ type: 'text', text: hits.length ? `「${args.query}」命中 ${hits.length} 条(索引 ${idx.entries.length} 条)` : `「${args.query}」无命中;先 awesome_sync 或换关键词` }],
89
+ content: [{ type: 'text', text: head + fmtText(hits) }],
81
90
  structuredContent: { query: args.query, count: hits.length, results: hits.map(fmt) },
82
91
  };
83
92
  }
@@ -90,9 +99,10 @@ async function callTool(name, args = {}) {
90
99
  const limit = Math.min(Number(args.limit) || 40, 200);
91
100
  const cat = (args.category || '').toLowerCase();
92
101
  const rows = idx.entries.filter(e => (!args.list || e.list === args.list) && (!cat || (e.category || '').toLowerCase().includes(cat)));
102
+ const shown = rows.slice(0, limit);
93
103
  return {
94
- content: [{ type: 'text', text: `${args.list || '全部'}${cat ? ' / ' + args.category : ''}: ${rows.length} 条` }],
95
- structuredContent: { total: rows.length, returned: Math.min(rows.length, limit), results: rows.slice(0, limit).map(fmt) },
104
+ content: [{ type: 'text', text: `${args.list || '全部'}${cat ? ' / ' + args.category : ''}: 共 ${rows.length} 条,显示 ${shown.length} 条\n` + fmtText(shown) }],
105
+ structuredContent: { total: rows.length, returned: shown.length, results: shown.map(fmt) },
96
106
  };
97
107
  }
98
108
  if (name === 'awesome_sync') {