aivault-mcp 0.1.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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -0
  5. package/dist/cli/cli.js +111 -0
  6. package/dist/cli/cli.js.map +1 -0
  7. package/dist/cli/commands/dashboard.d.ts +2 -0
  8. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  9. package/dist/cli/commands/dashboard.js +155 -0
  10. package/dist/cli/commands/dashboard.js.map +1 -0
  11. package/dist/cli/commands/delete.d.ts +2 -0
  12. package/dist/cli/commands/delete.d.ts.map +1 -0
  13. package/dist/cli/commands/delete.js +28 -0
  14. package/dist/cli/commands/delete.js.map +1 -0
  15. package/dist/cli/commands/export.d.ts +2 -0
  16. package/dist/cli/commands/export.d.ts.map +1 -0
  17. package/dist/cli/commands/export.js +27 -0
  18. package/dist/cli/commands/export.js.map +1 -0
  19. package/dist/cli/commands/init.d.ts +2 -0
  20. package/dist/cli/commands/init.d.ts.map +1 -0
  21. package/dist/cli/commands/init.js +32 -0
  22. package/dist/cli/commands/init.js.map +1 -0
  23. package/dist/cli/commands/list.d.ts +2 -0
  24. package/dist/cli/commands/list.d.ts.map +1 -0
  25. package/dist/cli/commands/list.js +22 -0
  26. package/dist/cli/commands/list.js.map +1 -0
  27. package/dist/cli/commands/set.d.ts +2 -0
  28. package/dist/cli/commands/set.d.ts.map +1 -0
  29. package/dist/cli/commands/set.js +31 -0
  30. package/dist/cli/commands/set.js.map +1 -0
  31. package/dist/cli/utils.d.ts +4 -0
  32. package/dist/cli/utils.d.ts.map +1 -0
  33. package/dist/cli/utils.js +57 -0
  34. package/dist/cli/utils.js.map +1 -0
  35. package/dist/executor/parser.d.ts +6 -0
  36. package/dist/executor/parser.d.ts.map +1 -0
  37. package/dist/executor/parser.js +17 -0
  38. package/dist/executor/parser.js.map +1 -0
  39. package/dist/executor/runner.d.ts +17 -0
  40. package/dist/executor/runner.d.ts.map +1 -0
  41. package/dist/executor/runner.js +63 -0
  42. package/dist/executor/runner.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +18 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/scrubber/scrubber.d.ts +7 -0
  48. package/dist/scrubber/scrubber.d.ts.map +1 -0
  49. package/dist/scrubber/scrubber.js +40 -0
  50. package/dist/scrubber/scrubber.js.map +1 -0
  51. package/dist/server.d.ts +4 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +87 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/vault/crypto.d.ts +4 -0
  56. package/dist/vault/crypto.d.ts.map +1 -0
  57. package/dist/vault/crypto.js +44 -0
  58. package/dist/vault/crypto.js.map +1 -0
  59. package/dist/vault/store.d.ts +19 -0
  60. package/dist/vault/store.d.ts.map +1 -0
  61. package/dist/vault/store.js +118 -0
  62. package/dist/vault/store.js.map +1 -0
  63. package/dist/vault/types.d.ts +25 -0
  64. package/dist/vault/types.d.ts.map +1 -0
  65. package/dist/vault/types.js +9 -0
  66. package/dist/vault/types.js.map +1 -0
  67. package/package.json +63 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VaultStore = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const crypto_1 = require("./crypto");
11
+ const types_1 = require("./types");
12
+ const AIVAULT_DIR = path_1.default.join(os_1.default.homedir(), '.aivault');
13
+ const VAULT_FILE = path_1.default.join(AIVAULT_DIR, 'vault.enc');
14
+ const CONFIG_FILE = path_1.default.join(AIVAULT_DIR, 'config.json');
15
+ class VaultStore {
16
+ constructor(password, vaultDir) {
17
+ this.password = password;
18
+ this.vaultDir = vaultDir || AIVAULT_DIR;
19
+ this.vaultFile = path_1.default.join(this.vaultDir, 'vault.enc');
20
+ this.configFile = path_1.default.join(this.vaultDir, 'config.json');
21
+ }
22
+ isInitialized() {
23
+ return fs_1.default.existsSync(this.vaultFile);
24
+ }
25
+ init() {
26
+ if (!fs_1.default.existsSync(this.vaultDir)) {
27
+ fs_1.default.mkdirSync(this.vaultDir, { recursive: true, mode: 0o700 });
28
+ }
29
+ if (this.isInitialized()) {
30
+ throw new Error('Vault already initialized. Use "aivault set" to add secrets.');
31
+ }
32
+ const emptyVault = { secrets: [] };
33
+ this.writeVault(emptyVault);
34
+ const config = { version: '0.1.0', created_at: new Date().toISOString() };
35
+ fs_1.default.writeFileSync(this.configFile, JSON.stringify(config, null, 2), { mode: 0o600 });
36
+ }
37
+ readVault() {
38
+ if (!this.isInitialized()) {
39
+ throw new Error('Vault not initialized. Run "aivault init" first.');
40
+ }
41
+ const raw = fs_1.default.readFileSync(this.vaultFile);
42
+ const json = (0, crypto_1.decrypt)(raw, this.password);
43
+ return JSON.parse(json);
44
+ }
45
+ writeVault(data) {
46
+ const json = JSON.stringify(data, null, 2);
47
+ const encrypted = (0, crypto_1.encrypt)(json, this.password);
48
+ fs_1.default.writeFileSync(this.vaultFile, encrypted, { mode: 0o600 });
49
+ }
50
+ setSecret(name, value, description, tags = []) {
51
+ if (!(0, types_1.isValidSecretName)(name)) {
52
+ throw new Error(`Invalid secret name "${name}". Must be uppercase letters, numbers, and underscores only, starting with a letter.`);
53
+ }
54
+ const vault = this.readVault();
55
+ const now = new Date().toISOString();
56
+ const existing = vault.secrets.findIndex(s => s.name === name);
57
+ if (existing >= 0) {
58
+ vault.secrets[existing] = {
59
+ ...vault.secrets[existing],
60
+ value,
61
+ description,
62
+ tags,
63
+ updated_at: now,
64
+ };
65
+ }
66
+ else {
67
+ vault.secrets.push({
68
+ name,
69
+ value,
70
+ description,
71
+ tags,
72
+ created_at: now,
73
+ updated_at: now,
74
+ });
75
+ }
76
+ this.writeVault(vault);
77
+ }
78
+ getSecret(name) {
79
+ const vault = this.readVault();
80
+ return vault.secrets.find(s => s.name === name);
81
+ }
82
+ listSecrets(tag) {
83
+ const vault = this.readVault();
84
+ let secrets = vault.secrets;
85
+ if (tag) {
86
+ secrets = secrets.filter(s => s.tags.includes(tag));
87
+ }
88
+ return secrets.map(s => ({
89
+ name: s.name,
90
+ description: s.description,
91
+ tags: s.tags,
92
+ }));
93
+ }
94
+ deleteSecret(name) {
95
+ const vault = this.readVault();
96
+ const index = vault.secrets.findIndex(s => s.name === name);
97
+ if (index < 0) {
98
+ return false;
99
+ }
100
+ vault.secrets.splice(index, 1);
101
+ this.writeVault(vault);
102
+ return true;
103
+ }
104
+ getAllSecrets() {
105
+ const vault = this.readVault();
106
+ return vault.secrets;
107
+ }
108
+ getAllSecretValues() {
109
+ const vault = this.readVault();
110
+ const map = new Map();
111
+ for (const secret of vault.secrets) {
112
+ map.set(secret.name, secret.value);
113
+ }
114
+ return map;
115
+ }
116
+ }
117
+ exports.VaultStore = VaultStore;
118
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/vault/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface Secret {
2
+ name: string;
3
+ value: string;
4
+ description: string;
5
+ tags: string[];
6
+ created_at: string;
7
+ updated_at: string;
8
+ }
9
+ export interface SecretMetadata {
10
+ name: string;
11
+ description: string;
12
+ tags: string[];
13
+ }
14
+ export interface VaultData {
15
+ secrets: Secret[];
16
+ }
17
+ export interface EncryptedPayload {
18
+ salt: Buffer;
19
+ iv: Buffer;
20
+ authTag: Buffer;
21
+ encrypted: Buffer;
22
+ }
23
+ export declare const SECRET_NAME_REGEX: RegExp;
24
+ export declare function isValidSecretName(name: string): boolean;
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/vault/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SECRET_NAME_REGEX = void 0;
4
+ exports.isValidSecretName = isValidSecretName;
5
+ exports.SECRET_NAME_REGEX = /^[A-Z][A-Z0-9_]*$/;
6
+ function isValidSecretName(name) {
7
+ return exports.SECRET_NAME_REGEX.test(name);
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/vault/types.ts"],"names":[],"mappings":";;;AA4BA,8CAEC;AAJY,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAErD,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "aivault-mcp",
3
+ "version": "0.1.0",
4
+ "description": "Secure secret management for AI agents — MCP server that lets AI use your credentials without seeing them",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "aivault": "dist/cli/cli.js"
8
+ },
9
+ "files": [
10
+ "dist/**/*",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "prepublishOnly": "npm run build",
17
+ "start": "node dist/index.js",
18
+ "dev": "ts-node src/index.ts",
19
+ "cli": "ts-node src/cli/cli.ts",
20
+ "test": "jest"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "model-context-protocol",
25
+ "secrets",
26
+ "vault",
27
+ "ai",
28
+ "credentials",
29
+ "security",
30
+ "claude",
31
+ "cursor",
32
+ "kiro",
33
+ "windsurf",
34
+ "api-keys",
35
+ "secret-management",
36
+ "ai-agent",
37
+ "llm"
38
+ ],
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "https://github.com/mohshomis/AIVault.git"
43
+ },
44
+ "homepage": "https://github.com/mohshomis/AIVault#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/mohshomis/AIVault/issues"
47
+ },
48
+ "author": "Mohammed Shomis (https://github.com/mohshomis)",
49
+ "engines": {
50
+ "node": ">=18"
51
+ },
52
+ "dependencies": {
53
+ "@modelcontextprotocol/sdk": "^1.12.1"
54
+ },
55
+ "devDependencies": {
56
+ "typescript": "^5.0.0",
57
+ "@types/node": "^20.0.0",
58
+ "jest": "^29.0.0",
59
+ "ts-jest": "^29.0.0",
60
+ "@types/jest": "^29.0.0",
61
+ "ts-node": "^10.0.0"
62
+ }
63
+ }