@tankpkg/mcp-server 0.6.3 → 0.8.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 (87) hide show
  1. package/README.md +11 -4
  2. package/dist/index.d.ts +1 -3
  3. package/dist/index.js +2215 -29
  4. package/dist/index.js.map +1 -1
  5. package/package.json +20 -14
  6. package/LICENSE +0 -21
  7. package/dist/index.d.ts.map +0 -1
  8. package/dist/lib/api-client.d.ts +0 -45
  9. package/dist/lib/api-client.d.ts.map +0 -1
  10. package/dist/lib/api-client.js +0 -78
  11. package/dist/lib/api-client.js.map +0 -1
  12. package/dist/lib/config.d.ts +0 -25
  13. package/dist/lib/config.d.ts.map +0 -1
  14. package/dist/lib/config.js +0 -59
  15. package/dist/lib/config.js.map +0 -1
  16. package/dist/lib/packer.d.ts +0 -34
  17. package/dist/lib/packer.d.ts.map +0 -1
  18. package/dist/lib/packer.js +0 -276
  19. package/dist/lib/packer.js.map +0 -1
  20. package/dist/tools/audit-skill.d.ts +0 -3
  21. package/dist/tools/audit-skill.d.ts.map +0 -1
  22. package/dist/tools/audit-skill.js +0 -213
  23. package/dist/tools/audit-skill.js.map +0 -1
  24. package/dist/tools/doctor.d.ts +0 -3
  25. package/dist/tools/doctor.d.ts.map +0 -1
  26. package/dist/tools/doctor.js +0 -158
  27. package/dist/tools/doctor.js.map +0 -1
  28. package/dist/tools/init-skill.d.ts +0 -3
  29. package/dist/tools/init-skill.d.ts.map +0 -1
  30. package/dist/tools/init-skill.js +0 -72
  31. package/dist/tools/init-skill.js.map +0 -1
  32. package/dist/tools/install-skill.d.ts +0 -3
  33. package/dist/tools/install-skill.d.ts.map +0 -1
  34. package/dist/tools/install-skill.js +0 -206
  35. package/dist/tools/install-skill.js.map +0 -1
  36. package/dist/tools/link-skill.d.ts +0 -3
  37. package/dist/tools/link-skill.d.ts.map +0 -1
  38. package/dist/tools/link-skill.js +0 -81
  39. package/dist/tools/link-skill.js.map +0 -1
  40. package/dist/tools/login.d.ts +0 -3
  41. package/dist/tools/login.d.ts.map +0 -1
  42. package/dist/tools/login.js +0 -104
  43. package/dist/tools/login.js.map +0 -1
  44. package/dist/tools/logout.d.ts +0 -3
  45. package/dist/tools/logout.d.ts.map +0 -1
  46. package/dist/tools/logout.js +0 -19
  47. package/dist/tools/logout.js.map +0 -1
  48. package/dist/tools/publish-skill.d.ts +0 -3
  49. package/dist/tools/publish-skill.d.ts.map +0 -1
  50. package/dist/tools/publish-skill.js +0 -166
  51. package/dist/tools/publish-skill.js.map +0 -1
  52. package/dist/tools/remove-skill.d.ts +0 -3
  53. package/dist/tools/remove-skill.d.ts.map +0 -1
  54. package/dist/tools/remove-skill.js +0 -110
  55. package/dist/tools/remove-skill.js.map +0 -1
  56. package/dist/tools/scan-skill.d.ts +0 -3
  57. package/dist/tools/scan-skill.d.ts.map +0 -1
  58. package/dist/tools/scan-skill.js +0 -200
  59. package/dist/tools/scan-skill.js.map +0 -1
  60. package/dist/tools/search-skills.d.ts +0 -3
  61. package/dist/tools/search-skills.d.ts.map +0 -1
  62. package/dist/tools/search-skills.js +0 -54
  63. package/dist/tools/search-skills.js.map +0 -1
  64. package/dist/tools/skill-info.d.ts +0 -3
  65. package/dist/tools/skill-info.d.ts.map +0 -1
  66. package/dist/tools/skill-info.js +0 -88
  67. package/dist/tools/skill-info.js.map +0 -1
  68. package/dist/tools/skill-permissions.d.ts +0 -3
  69. package/dist/tools/skill-permissions.d.ts.map +0 -1
  70. package/dist/tools/skill-permissions.js +0 -311
  71. package/dist/tools/skill-permissions.js.map +0 -1
  72. package/dist/tools/unlink-skill.d.ts +0 -3
  73. package/dist/tools/unlink-skill.d.ts.map +0 -1
  74. package/dist/tools/unlink-skill.js +0 -72
  75. package/dist/tools/unlink-skill.js.map +0 -1
  76. package/dist/tools/update-skill.d.ts +0 -3
  77. package/dist/tools/update-skill.d.ts.map +0 -1
  78. package/dist/tools/update-skill.js +0 -317
  79. package/dist/tools/update-skill.js.map +0 -1
  80. package/dist/tools/verify-skills.d.ts +0 -3
  81. package/dist/tools/verify-skills.d.ts.map +0 -1
  82. package/dist/tools/verify-skills.js +0 -121
  83. package/dist/tools/verify-skills.js.map +0 -1
  84. package/dist/tools/whoami.d.ts +0 -3
  85. package/dist/tools/whoami.d.ts.map +0 -1
  86. package/dist/tools/whoami.js +0 -29
  87. package/dist/tools/whoami.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"publish-skill.js","sourceRoot":"","sources":["../../src/tools/publish-skill.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerRemoveSkillTool(server: McpServer): void;
3
- //# sourceMappingURL=remove-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove-skill.d.ts","sourceRoot":"","sources":["../../src/tools/remove-skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4G/D"}
@@ -1,110 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { z } from 'zod';
4
- const SCOPED_NAME_PATTERN = /^@[a-z0-9-]+\/[a-z0-9][a-z0-9-]*$/;
5
- export function registerRemoveSkillTool(server) {
6
- server.tool('remove-skill', 'Remove an installed skill from the project. Removes from skills.json, skills.lock, and deletes skill files.', {
7
- name: z.string().describe('Skill name in @org/name format'),
8
- directory: z.string().optional().describe('Project directory (defaults to current working directory)'),
9
- }, async ({ name, directory }) => {
10
- if (!SCOPED_NAME_PATTERN.test(name)) {
11
- return {
12
- content: [{
13
- type: 'text',
14
- text: `Validation error: Skill name "${name}" must use the @org/name format (e.g. @acme/my-skill).`,
15
- }],
16
- isError: true,
17
- };
18
- }
19
- const dir = directory ? path.resolve(directory) : process.cwd();
20
- const results = [];
21
- let skillFoundAnywhere = false;
22
- const skillsJsonPath = path.join(dir, 'skills.json');
23
- if (fs.existsSync(skillsJsonPath)) {
24
- try {
25
- const raw = fs.readFileSync(skillsJsonPath, 'utf-8');
26
- const skillsJson = JSON.parse(raw);
27
- const skills = (skillsJson.skills ?? {});
28
- if (name in skills) {
29
- skillFoundAnywhere = true;
30
- delete skills[name];
31
- skillsJson.skills = skills;
32
- fs.writeFileSync(skillsJsonPath, JSON.stringify(skillsJson, null, 2) + '\n');
33
- results.push(`Removed "${name}" from skills.json`);
34
- }
35
- }
36
- catch {
37
- results.push('Warning: Failed to read or parse skills.json');
38
- }
39
- }
40
- const lockPath = path.join(dir, 'skills.lock');
41
- if (fs.existsSync(lockPath)) {
42
- try {
43
- const raw = fs.readFileSync(lockPath, 'utf-8');
44
- const lock = JSON.parse(raw);
45
- let removedFromLock = false;
46
- for (const key of Object.keys(lock.skills)) {
47
- const lastAt = key.lastIndexOf('@');
48
- if (lastAt <= 0)
49
- continue;
50
- const keyName = key.slice(0, lastAt);
51
- if (keyName === name) {
52
- delete lock.skills[key];
53
- removedFromLock = true;
54
- skillFoundAnywhere = true;
55
- }
56
- }
57
- if (removedFromLock) {
58
- const sortedSkills = {};
59
- for (const key of Object.keys(lock.skills).sort()) {
60
- sortedSkills[key] = lock.skills[key];
61
- }
62
- lock.skills = sortedSkills;
63
- fs.writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\n');
64
- results.push(`Removed "${name}" from skills.lock`);
65
- }
66
- }
67
- catch {
68
- results.push('Warning: Failed to read or parse skills.lock');
69
- }
70
- }
71
- const skillDir = getSkillDir(dir, name);
72
- if (fs.existsSync(skillDir)) {
73
- skillFoundAnywhere = true;
74
- fs.rmSync(skillDir, { recursive: true, force: true });
75
- results.push(`Deleted skill files from ${skillDir}`);
76
- }
77
- else {
78
- results.push(`Skill files were already absent from ${skillDir}`);
79
- }
80
- const symlinkName = name.replace(/\//g, '__');
81
- const agentSkillDir = path.join(dir, '.tank', 'agent-skills', symlinkName);
82
- if (fs.existsSync(agentSkillDir)) {
83
- fs.rmSync(agentSkillDir, { recursive: true, force: true });
84
- results.push('Removed symlink from agent workspace');
85
- }
86
- if (!skillFoundAnywhere) {
87
- return {
88
- content: [{
89
- type: 'text',
90
- text: `Skill "${name}" is not installed. It was not found in skills.json, skills.lock, or .tank/skills/.`,
91
- }],
92
- isError: true,
93
- };
94
- }
95
- return {
96
- content: [{
97
- type: 'text',
98
- text: `Successfully removed ${name}.\n${results.join('\n')}`,
99
- }],
100
- };
101
- });
102
- }
103
- function getSkillDir(projectDir, skillName) {
104
- if (skillName.startsWith('@')) {
105
- const [scope, name] = skillName.split('/');
106
- return path.join(projectDir, '.tank', 'skills', scope, name);
107
- }
108
- return path.join(projectDir, '.tank', 'skills', skillName);
109
- }
110
- //# sourceMappingURL=remove-skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove-skill.js","sourceRoot":"","sources":["../../src/tools/remove-skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEhE,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6GAA6G,EAC7G;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC3D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;KACvG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iCAAiC,IAAI,wDAAwD;qBACpG,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAChE,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;gBAC9D,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAA2B,CAAC;gBAEnE,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACnB,kBAAkB,GAAG,IAAI,CAAC;oBAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACpB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC3B,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC7E,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;gBAC3C,IAAI,eAAe,GAAG,KAAK,CAAC;gBAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpC,IAAI,MAAM,IAAI,CAAC;wBAAE,SAAS;oBAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACrC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;wBACrB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACxB,eAAe,GAAG,IAAI,CAAC;wBACvB,kBAAkB,GAAG,IAAI,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAED,IAAI,eAAe,EAAE,CAAC;oBACpB,MAAM,YAAY,GAA4B,EAAE,CAAC;oBACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClD,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvC,CAAC;oBACD,IAAI,CAAC,MAAM,GAAG,YAAoC,CAAC;oBACnD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBACjE,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,kBAAkB,GAAG,IAAI,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjC,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,IAAI,qFAAqF;qBAC1G,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC7D,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,SAAiB;IACxD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerScanSkillTool(server: McpServer): void;
3
- //# sourceMappingURL=scan-skill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-skill.d.ts","sourceRoot":"","sources":["../../src/tools/scan-skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8CzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6N7D"}
@@ -1,200 +0,0 @@
1
- import { z } from 'zod';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { TankApiClient } from '../lib/api-client.js';
5
- import { pack, packForScan } from '../lib/packer.js';
6
- import { getConfig } from '../lib/config.js';
7
- export function registerScanSkillTool(server) {
8
- server.tool('scan-skill', 'Scan a skill directory for security issues. Requires authentication.', {
9
- directory: z.string().optional().describe('Directory to scan (default: current directory)'),
10
- }, async ({ directory = '.' }) => {
11
- const absDir = path.resolve(directory);
12
- let client = new TankApiClient();
13
- // Check auth, guide user to login if not authenticated
14
- if (!client.isAuthenticated) {
15
- return {
16
- content: [
17
- {
18
- type: 'text',
19
- text: 'You need to log in first. Use the login tool to authenticate with Tank.\n\nExample: "Log in to Tank"',
20
- },
21
- ],
22
- };
23
- }
24
- // Verify auth is still valid
25
- const authCheck = await client.verifyAuth();
26
- if (!authCheck.valid) {
27
- return {
28
- content: [
29
- {
30
- type: 'text',
31
- text: 'Your session has expired. Use the login tool to authenticate again.\n\nExample: "Log in to Tank"',
32
- },
33
- ],
34
- };
35
- }
36
- let packResult;
37
- let usedSynthesisedManifest = false;
38
- const skillsJsonPath = path.join(absDir, 'skills.json');
39
- const hasSkillsJson = fs.existsSync(skillsJsonPath);
40
- if (hasSkillsJson) {
41
- try {
42
- packResult = await pack(absDir);
43
- }
44
- catch (err) {
45
- return {
46
- content: [
47
- {
48
- type: 'text',
49
- text: `Failed to pack skill: ${err instanceof Error ? err.message : String(err)}`,
50
- },
51
- ],
52
- };
53
- }
54
- }
55
- else {
56
- try {
57
- packResult = await packForScan(absDir);
58
- usedSynthesisedManifest = true;
59
- }
60
- catch (err) {
61
- return {
62
- content: [
63
- {
64
- type: 'text',
65
- text: `Failed to pack directory for scan: ${err instanceof Error ? err.message : String(err)}`,
66
- },
67
- ],
68
- };
69
- }
70
- }
71
- const manifest = packResult.manifest;
72
- const skillName = manifest.name ?? 'unknown';
73
- const skillVersion = manifest.version ?? '0.0.0';
74
- // Upload tarball and trigger scan
75
- const formData = new FormData();
76
- const blob = new Blob([packResult.tarball], { type: 'application/gzip' });
77
- formData.append('tarball', blob, `${skillName}-${skillVersion}.tgz`);
78
- formData.append('manifest', JSON.stringify(manifest));
79
- const config = getConfig();
80
- const scanRes = await fetch(`${config.registry}/api/v1/scan`, {
81
- method: 'POST',
82
- headers: {
83
- Authorization: `Bearer ${client.token}`,
84
- },
85
- body: formData,
86
- });
87
- if (!scanRes.ok) {
88
- const body = await scanRes.json().catch(() => ({}));
89
- return {
90
- content: [
91
- {
92
- type: 'text',
93
- text: `Scan failed: ${body.error ?? scanRes.statusText}`,
94
- },
95
- ],
96
- };
97
- }
98
- const scanResult = (await scanRes.json());
99
- // Format report
100
- const verdictEmoji = {
101
- pass: '✅',
102
- pass_with_notes: '⚠️',
103
- flagged: '🚩',
104
- fail: '❌',
105
- };
106
- const severityEmoji = {
107
- critical: '🔴',
108
- high: '🟠',
109
- medium: '🟡',
110
- low: '🟢',
111
- };
112
- const lines = [
113
- `## Scan Results for ${skillName}@${skillVersion}`,
114
- '',
115
- ];
116
- if (usedSynthesisedManifest) {
117
- lines.push('> **Note:** No `skills.json` found. A synthesised manifest was used for scanning.');
118
- lines.push('');
119
- }
120
- const auditScore = scanResult.audit_score ?? 0;
121
- const durationMs = scanResult.duration_ms ?? 0;
122
- lines.push(`**Verdict:** ${verdictEmoji[scanResult.verdict] ?? ''} ${scanResult.verdict.toUpperCase()}`, `**Score:** ${auditScore.toFixed(1)}/10`, `**Duration:** ${(durationMs / 1000).toFixed(1)}s`, `**Files:** ${packResult.fileCount} (${(packResult.totalSize / 1024).toFixed(1)}KB)`, '');
123
- if (scanResult.findings.length > 0) {
124
- lines.push(`### Findings (${scanResult.findings.length})`);
125
- lines.push('');
126
- // Group by severity
127
- const bySeverity = {
128
- critical: [],
129
- high: [],
130
- medium: [],
131
- low: [],
132
- };
133
- for (const f of scanResult.findings) {
134
- bySeverity[f.severity].push(f);
135
- }
136
- for (const severity of ['critical', 'high', 'medium', 'low']) {
137
- const findings = bySeverity[severity];
138
- if (findings.length === 0)
139
- continue;
140
- lines.push(`#### ${severityEmoji[severity]} ${severity.toUpperCase()} (${findings.length})`);
141
- for (const f of findings) {
142
- lines.push(`- **${f.type}**: ${f.description}`);
143
- if (f.location)
144
- lines.push(` - Location: ${f.location}`);
145
- }
146
- lines.push('');
147
- }
148
- }
149
- else {
150
- lines.push('No findings. Your skill looks secure!');
151
- lines.push('');
152
- }
153
- // Stages run
154
- if (scanResult.stage_results?.length > 0) {
155
- lines.push('### Scan Stages');
156
- lines.push('');
157
- for (const stage of scanResult.stage_results) {
158
- const status = stage.status === 'passed' ? '✓' : '✗';
159
- lines.push(`- ${status} ${stage.stage} (${stage.duration_ms}ms)`);
160
- }
161
- lines.push('');
162
- }
163
- // LLM Analysis
164
- if (scanResult.llm_analysis && scanResult.llm_analysis.enabled) {
165
- const llm = scanResult.llm_analysis;
166
- lines.push('### LLM Analysis');
167
- lines.push('');
168
- lines.push(`**Mode:** ${llm.mode}`);
169
- if (llm.provider_used) {
170
- lines.push(`**Provider:** ${llm.provider_used}`);
171
- }
172
- if (llm.findings_reviewed !== undefined && llm.findings_reviewed > 0) {
173
- lines.push(`**Findings Reviewed:** ${llm.findings_reviewed}`);
174
- }
175
- if (llm.findings_dismissed !== undefined && llm.findings_dismissed > 0) {
176
- lines.push(`**False Positives Dismissed:** ${llm.findings_dismissed}`);
177
- }
178
- if (llm.findings_confirmed !== undefined && llm.findings_confirmed > 0) {
179
- lines.push(`**Threats Confirmed:** ${llm.findings_confirmed}`);
180
- }
181
- if (llm.findings_uncertain !== undefined && llm.findings_uncertain > 0) {
182
- lines.push(`**Uncertain:** ${llm.findings_uncertain}`);
183
- }
184
- if (llm.latency_ms) {
185
- lines.push(`**Latency:** ${llm.latency_ms}ms`);
186
- }
187
- if (llm.error) {
188
- lines.push(`**Error:** ${llm.error}`);
189
- }
190
- lines.push('');
191
- }
192
- if (scanResult.scan_id) {
193
- lines.push(`View full report: https://tankpkg.dev/scans/${scanResult.scan_id}`);
194
- }
195
- return {
196
- content: [{ type: 'text', text: lines.join('\n') }],
197
- };
198
- });
199
- }
200
- //# sourceMappingURL=scan-skill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-skill.js","sourceRoot":"","sources":["../../src/tools/scan-skill.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSearchSkillsTool(server: McpServer): void;
3
- //# sourceMappingURL=search-skills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-skills.d.ts","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgEhE"}
@@ -1,54 +0,0 @@
1
- import { z } from 'zod';
2
- import { TankApiClient } from '../lib/api-client.js';
3
- export function registerSearchSkillsTool(server) {
4
- const client = new TankApiClient();
5
- server.tool('search-skills', 'Search the Tank registry for AI agent skills', {
6
- query: z.string().min(1).describe('Search query (skill name or keywords)'),
7
- limit: z.number().min(1).max(50).optional().default(10).describe('Maximum results to return'),
8
- }, async ({ query, limit }) => {
9
- const result = await client.fetch(`/api/v1/search?q=${encodeURIComponent(query)}&limit=${limit}`);
10
- if (!result.ok) {
11
- return {
12
- content: [
13
- {
14
- type: 'text',
15
- text: `Search failed: ${result.error}`,
16
- },
17
- ],
18
- };
19
- }
20
- const { results, total } = result.data;
21
- if (results.length === 0) {
22
- return {
23
- content: [
24
- {
25
- type: 'text',
26
- text: `No skills found matching "${query}". Try different keywords or browse the registry at https://tankpkg.dev`,
27
- },
28
- ],
29
- };
30
- }
31
- // Format as markdown table
32
- const header = '| Skill | Score | Downloads | Description |\n|-------|-------|-----------|-------------|';
33
- const rows = results.map((skill) => {
34
- const score = skill.auditScore !== null ? skill.auditScore.toFixed(1) : '-';
35
- const downloads = skill.downloads > 1000
36
- ? `${(skill.downloads / 1000).toFixed(1)}k`
37
- : skill.downloads.toString();
38
- const desc = skill.description?.slice(0, 50) ?? 'No description';
39
- return `| ${skill.name} | ${score} | ${downloads} | ${desc} |`;
40
- });
41
- const text = [
42
- `Found ${total} skill${total !== 1 ? 's' : ''} matching "${query}":`,
43
- '',
44
- header,
45
- ...rows,
46
- '',
47
- 'View full results: https://tankpkg.dev/search?q=' + encodeURIComponent(query),
48
- ].join('\n');
49
- return {
50
- content: [{ type: 'text', text }],
51
- };
52
- });
53
- }
54
- //# sourceMappingURL=search-skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-skills.js","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAgBrD,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8CAA8C,EAC9C;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAC9F,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAC/D,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,kBAAkB,MAAM,CAAC,KAAK,EAAE;qBACvC;iBACF;aACF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAEvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,6BAA6B,KAAK,yEAAyE;qBAClH;iBACF;aACF,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,0FAA0F,CAAC;QAC1G,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI;gBACtC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;gBAC3C,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC;YACjE,OAAO,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,MAAM,SAAS,MAAM,IAAI,IAAI,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG;YACX,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI;YACpE,EAAE;YACF,MAAM;YACN,GAAG,IAAI;YACP,EAAE;YACF,kDAAkD,GAAG,kBAAkB,CAAC,KAAK,CAAC;SAC/E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSkillInfoTool(server: McpServer): void;
3
- //# sourceMappingURL=skill-info.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-info.d.ts","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkG7D"}
@@ -1,88 +0,0 @@
1
- import { z } from 'zod';
2
- import { TankApiClient } from '../lib/api-client.js';
3
- export function registerSkillInfoTool(server) {
4
- const client = new TankApiClient();
5
- server.tool('skill-info', 'Get detailed information about a specific skill from the Tank registry', {
6
- name: z.string().describe('Skill name (e.g., @org/skill-name or skill-name)'),
7
- }, async ({ name }) => {
8
- const result = await client.fetch(`/api/v1/skills/${encodeURIComponent(name)}`);
9
- if (!result.ok) {
10
- if (result.status === 404) {
11
- return {
12
- content: [
13
- {
14
- type: 'text',
15
- text: `Skill "${name}" not found. Search for skills: https://tankpkg.dev/search`,
16
- },
17
- ],
18
- };
19
- }
20
- return {
21
- content: [
22
- {
23
- type: 'text',
24
- text: `Failed to get skill info: ${result.error}`,
25
- },
26
- ],
27
- };
28
- }
29
- const skill = result.data;
30
- const score = skill.auditScore !== null ? `${skill.auditScore.toFixed(1)}/10` : 'Not scored';
31
- const size = skill.versions[0]
32
- ? `${(skill.versions[0].tarballSize / 1024).toFixed(1)}KB`
33
- : 'Unknown';
34
- // Format permissions as readable text
35
- let permsText = 'None declared';
36
- if (skill.permissions) {
37
- const perms = [];
38
- const p = skill.permissions;
39
- if (p.network?.outbound?.length) {
40
- perms.push(`network: ${p.network.outbound.join(', ')}`);
41
- }
42
- if (p.filesystem?.read?.length || p.filesystem?.write?.length) {
43
- const fsPerms = [];
44
- if (p.filesystem.read?.length)
45
- fsPerms.push(`read: ${p.filesystem.read.length} paths`);
46
- if (p.filesystem.write?.length)
47
- fsPerms.push(`write: ${p.filesystem.write.length} paths`);
48
- perms.push(`filesystem (${fsPerms.join(', ')})`);
49
- }
50
- if (p.subprocess)
51
- perms.push('subprocess: allowed');
52
- if (perms.length > 0)
53
- permsText = perms.join('\n - ');
54
- }
55
- const versionsList = skill.versions
56
- .slice(0, 5)
57
- .map((v) => {
58
- const vScore = v.auditScore !== null ? v.auditScore.toFixed(1) : '-';
59
- return `${v.version} (score: ${vScore})`;
60
- })
61
- .join('\n - ');
62
- const text = [
63
- `# ${skill.name}`,
64
- '',
65
- `**Publisher:** ${skill.publisher}`,
66
- `**Latest:** ${skill.latestVersion}`,
67
- `**Score:** ${score}`,
68
- `**Size:** ${size}`,
69
- `**Downloads:** ${skill.downloads}`,
70
- '',
71
- '**Description:**',
72
- skill.description ?? 'No description available',
73
- '',
74
- '**Permissions:**',
75
- ` - ${permsText}`,
76
- '',
77
- '**Versions:**',
78
- ` - ${versionsList}`,
79
- skill.versions.length > 5 ? `\n ... and ${skill.versions.length - 5} more` : '',
80
- '',
81
- `View on Tank: https://tankpkg.dev/skills/${skill.name}`,
82
- ].join('\n');
83
- return {
84
- content: [{ type: 'text', text }],
85
- };
86
- });
87
- }
88
- //# sourceMappingURL=skill-info.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-info.js","sourceRoot":"","sources":["../../src/tools/skill-info.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSkillPermissionsTool(server: McpServer): void;
3
- //# sourceMappingURL=skill-permissions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-permissions.d.ts","sourceRoot":"","sources":["../../src/tools/skill-permissions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsMzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2KpE"}