@opencapstack/mcp-server 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 (77) hide show
  1. package/README.md +166 -0
  2. package/dist/auth.d.ts +7 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +16 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/client.d.ts +6 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +30 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +59 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server.d.ts +10 -0
  15. package/dist/server.d.ts.map +1 -0
  16. package/dist/server.js +73 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/tools/dilution.d.ts +3 -0
  19. package/dist/tools/dilution.d.ts.map +1 -0
  20. package/dist/tools/dilution.js +51 -0
  21. package/dist/tools/dilution.js.map +1 -0
  22. package/dist/tools/documents.d.ts +3 -0
  23. package/dist/tools/documents.d.ts.map +1 -0
  24. package/dist/tools/documents.js +72 -0
  25. package/dist/tools/documents.js.map +1 -0
  26. package/dist/tools/equityPlans.d.ts +3 -0
  27. package/dist/tools/equityPlans.d.ts.map +1 -0
  28. package/dist/tools/equityPlans.js +65 -0
  29. package/dist/tools/equityPlans.js.map +1 -0
  30. package/dist/tools/financialReports.d.ts +3 -0
  31. package/dist/tools/financialReports.d.ts.map +1 -0
  32. package/dist/tools/financialReports.js +79 -0
  33. package/dist/tools/financialReports.js.map +1 -0
  34. package/dist/tools/safes.d.ts +3 -0
  35. package/dist/tools/safes.d.ts.map +1 -0
  36. package/dist/tools/safes.js +102 -0
  37. package/dist/tools/safes.js.map +1 -0
  38. package/dist/tools/shareClasses.d.ts +3 -0
  39. package/dist/tools/shareClasses.d.ts.map +1 -0
  40. package/dist/tools/shareClasses.js +63 -0
  41. package/dist/tools/shareClasses.js.map +1 -0
  42. package/dist/tools/stakeholders.d.ts +3 -0
  43. package/dist/tools/stakeholders.d.ts.map +1 -0
  44. package/dist/tools/stakeholders.js +72 -0
  45. package/dist/tools/stakeholders.js.map +1 -0
  46. package/dist/tools/valuations.d.ts +3 -0
  47. package/dist/tools/valuations.d.ts.map +1 -0
  48. package/dist/tools/valuations.js +67 -0
  49. package/dist/tools/valuations.js.map +1 -0
  50. package/dist/tools/waterfall.d.ts +3 -0
  51. package/dist/tools/waterfall.d.ts.map +1 -0
  52. package/dist/tools/waterfall.js +46 -0
  53. package/dist/tools/waterfall.js.map +1 -0
  54. package/dist/types.d.ts +14 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +5 -0
  57. package/dist/types.js.map +1 -0
  58. package/package.json +57 -0
  59. package/src/auth.ts +19 -0
  60. package/src/client.ts +46 -0
  61. package/src/index.ts +70 -0
  62. package/src/server.ts +93 -0
  63. package/src/tools/dilution.ts +54 -0
  64. package/src/tools/documents.ts +74 -0
  65. package/src/tools/equityPlans.ts +67 -0
  66. package/src/tools/financialReports.ts +82 -0
  67. package/src/tools/safes.ts +104 -0
  68. package/src/tools/shareClasses.ts +65 -0
  69. package/src/tools/stakeholders.ts +74 -0
  70. package/src/tools/valuations.ts +73 -0
  71. package/src/tools/waterfall.ts +48 -0
  72. package/src/types.ts +16 -0
  73. package/tests/auth.test.ts +54 -0
  74. package/tests/server.test.ts +95 -0
  75. package/tests/tools/shareClasses.test.ts +133 -0
  76. package/tests/tools/stakeholders.test.ts +147 -0
  77. package/tsconfig.json +16 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equityPlans.js","sourceRoot":"","sources":["../../src/tools/equityPlans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const financialReportTools: ToolDefinition[];
3
+ //# sourceMappingURL=financialReports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"financialReports.d.ts","sourceRoot":"","sources":["../../src/tools/financialReports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,oBAAoB,EAAE,cAAc,EA8EhD,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { z } from 'zod';
2
+ export const financialReportTools = [
3
+ {
4
+ name: 'list_financial_reports',
5
+ description: 'List all financial reports (equity summaries, cap table snapshots, tax reports, etc.).',
6
+ inputSchema: z.object({
7
+ companyId: z.string().optional().describe('Filter by company ID'),
8
+ reportType: z
9
+ .enum([
10
+ 'cap_table_summary',
11
+ 'equity_summary',
12
+ 'tax_report',
13
+ '409A_report',
14
+ 'custom',
15
+ ])
16
+ .optional()
17
+ .describe('Filter by report type'),
18
+ limit: z.number().optional().default(20).describe('Max results to return'),
19
+ }),
20
+ handler: async (input, client) => {
21
+ const { data } = await client.get('/api/v1/financial-reports', { params: input });
22
+ const reports = data.reports ?? data;
23
+ return {
24
+ content: [{ type: 'text', text: JSON.stringify(reports, null, 2) }],
25
+ };
26
+ },
27
+ },
28
+ {
29
+ name: 'get_financial_report',
30
+ description: 'Get the full contents of a specific financial report by ID.',
31
+ inputSchema: z.object({
32
+ id: z.string().describe('Financial report ID'),
33
+ }),
34
+ handler: async (input, client) => {
35
+ const { data } = await client.get(`/api/v1/financial-reports/${input.id}`);
36
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
37
+ },
38
+ },
39
+ {
40
+ name: 'create_financial_report',
41
+ description: 'Generate a new financial report or cap table snapshot for the company.',
42
+ inputSchema: z.object({
43
+ companyId: z.string().describe('Company ID'),
44
+ reportType: z
45
+ .enum([
46
+ 'cap_table_summary',
47
+ 'equity_summary',
48
+ 'tax_report',
49
+ '409A_report',
50
+ 'custom',
51
+ ])
52
+ .describe('Type of report to generate'),
53
+ asOfDate: z
54
+ .string()
55
+ .optional()
56
+ .describe('Generate the report as of this date (ISO 8601 YYYY-MM-DD). Defaults to today.'),
57
+ includeConvertibles: z
58
+ .boolean()
59
+ .optional()
60
+ .default(true)
61
+ .describe('Include convertible instruments (SAFEs, notes) in the report'),
62
+ includeOptionPool: z
63
+ .boolean()
64
+ .optional()
65
+ .default(true)
66
+ .describe('Include option pool (granted and unissued) in the report'),
67
+ title: z.string().optional().describe('Custom report title'),
68
+ }),
69
+ handler: async (input, client) => {
70
+ const { data } = await client.post('/api/v1/financial-reports', input);
71
+ return {
72
+ content: [
73
+ { type: 'text', text: `Financial report created: ${JSON.stringify(data, null, 2)}` },
74
+ ],
75
+ };
76
+ },
77
+ },
78
+ ];
79
+ //# sourceMappingURL=financialReports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"financialReports.js","sourceRoot":"","sources":["../../src/tools/financialReports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,oBAAoB,GAAqB;IACpD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,wFAAwF;QAC1F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACjE,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC;gBACJ,mBAAmB;gBACnB,gBAAgB;gBAChB,YAAY;gBACZ,aAAa;gBACb,QAAQ;aACT,CAAC;iBACD,QAAQ,EAAE;iBACV,QAAQ,CAAC,uBAAuB,CAAC;YACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;SAC3E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAC/C,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,wEAAwE;QAC1E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,UAAU,EAAE,CAAC;iBACV,IAAI,CAAC;gBACJ,mBAAmB;gBACnB,gBAAgB;gBAChB,YAAY;gBACZ,aAAa;gBACb,QAAQ;aACT,CAAC;iBACD,QAAQ,CAAC,4BAA4B,CAAC;YACzC,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,+EAA+E,CAAC;YAC5F,mBAAmB,EAAE,CAAC;iBACnB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,8DAA8D,CAAC;YAC3E,iBAAiB,EAAE,CAAC;iBACjB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,IAAI,CAAC;iBACb,QAAQ,CAAC,0DAA0D,CAAC;YACvE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAC7D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;iBACrF;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const safeTools: ToolDefinition[];
3
+ //# sourceMappingURL=safes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safes.d.ts","sourceRoot":"","sources":["../../src/tools/safes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,cAAc,EAoGrC,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { z } from 'zod';
2
+ export const safeTools = [
3
+ {
4
+ name: 'list_safes',
5
+ description: 'List all SAFE (Simple Agreement for Future Equity) instruments in the cap table.',
6
+ inputSchema: z.object({
7
+ companyId: z.string().optional().describe('Filter by company ID'),
8
+ investorId: z.string().optional().describe('Filter by investor stakeholder ID'),
9
+ limit: z.number().optional().default(50).describe('Max results to return'),
10
+ }),
11
+ handler: async (input, client) => {
12
+ const { data } = await client.get('/api/v1/safes', { params: input });
13
+ const safes = data.safes ?? data;
14
+ return {
15
+ content: [{ type: 'text', text: JSON.stringify(safes, null, 2) }],
16
+ };
17
+ },
18
+ },
19
+ {
20
+ name: 'get_safe',
21
+ description: 'Get details for a specific SAFE instrument by ID.',
22
+ inputSchema: z.object({
23
+ id: z.string().describe('SAFE ID'),
24
+ }),
25
+ handler: async (input, client) => {
26
+ const { data } = await client.get(`/api/v1/safes/${input.id}`);
27
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
28
+ },
29
+ },
30
+ {
31
+ name: 'create_safe',
32
+ description: 'Record a new SAFE instrument (e.g. post-money SAFE from a YC-style round).',
33
+ inputSchema: z.object({
34
+ investmentAmount: z.number().positive().describe('Investment amount in USD'),
35
+ valuationCap: z
36
+ .number()
37
+ .positive()
38
+ .optional()
39
+ .describe('Valuation cap in USD (for valuation cap SAFEs)'),
40
+ discountRate: z
41
+ .number()
42
+ .min(0)
43
+ .max(100)
44
+ .optional()
45
+ .describe('Discount rate percentage (e.g. 20 for 20%)'),
46
+ safeType: z
47
+ .enum(['valuation_cap', 'discount', 'mfn', 'valuation_cap_and_discount'])
48
+ .describe('Type of SAFE'),
49
+ investorId: z.string().describe('Stakeholder ID of the investor'),
50
+ companyId: z.string().describe('Company ID'),
51
+ investmentDate: z.string().describe('Investment date in ISO 8601 format (YYYY-MM-DD)'),
52
+ proRataRights: z
53
+ .boolean()
54
+ .optional()
55
+ .default(false)
56
+ .describe('Whether the investor has pro-rata rights'),
57
+ }),
58
+ handler: async (input, client) => {
59
+ const { data } = await client.post('/api/v1/safes', input);
60
+ return {
61
+ content: [
62
+ { type: 'text', text: `SAFE created: ${JSON.stringify(data, null, 2)}` },
63
+ ],
64
+ };
65
+ },
66
+ },
67
+ {
68
+ name: 'update_safe',
69
+ description: 'Update an existing SAFE instrument (e.g. record conversion).',
70
+ inputSchema: z.object({
71
+ id: z.string().describe('SAFE ID'),
72
+ status: z
73
+ .enum(['open', 'converted', 'cancelled'])
74
+ .optional()
75
+ .describe('Current status of the SAFE'),
76
+ conversionDate: z
77
+ .string()
78
+ .optional()
79
+ .describe('Conversion date in ISO 8601 format (YYYY-MM-DD)'),
80
+ convertedShareClassId: z
81
+ .string()
82
+ .optional()
83
+ .describe('Share class ID that this SAFE converted into'),
84
+ convertedShares: z
85
+ .number()
86
+ .int()
87
+ .positive()
88
+ .optional()
89
+ .describe('Number of shares issued upon conversion'),
90
+ }),
91
+ handler: async (input, client) => {
92
+ const { id, ...body } = input;
93
+ const { data } = await client.put(`/api/v1/safes/${id}`, body);
94
+ return {
95
+ content: [
96
+ { type: 'text', text: `SAFE updated: ${JSON.stringify(data, null, 2)}` },
97
+ ],
98
+ };
99
+ },
100
+ },
101
+ ];
102
+ //# sourceMappingURL=safes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safes.js","sourceRoot":"","sources":["../../src/tools/safes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const shareClassTools: ToolDefinition[];
3
+ //# sourceMappingURL=shareClasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareClasses.d.ts","sourceRoot":"","sources":["../../src/tools/shareClasses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,cAAc,EA6D3C,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { z } from 'zod';
2
+ export const shareClassTools = [
3
+ {
4
+ name: 'list_share_classes',
5
+ description: 'List all share classes defined in the cap table (e.g. Common, Series A Preferred).',
6
+ inputSchema: z.object({
7
+ companyId: z.string().optional().describe('Filter by company ID'),
8
+ limit: z.number().optional().default(50).describe('Max results to return'),
9
+ }),
10
+ handler: async (input, client) => {
11
+ const { data } = await client.get('/api/v1/share-classes', { params: input });
12
+ const shareClasses = data.shareClasses ?? data;
13
+ return {
14
+ content: [{ type: 'text', text: JSON.stringify(shareClasses, null, 2) }],
15
+ };
16
+ },
17
+ },
18
+ {
19
+ name: 'get_share_class',
20
+ description: 'Get details for a specific share class by ID.',
21
+ inputSchema: z.object({
22
+ id: z.string().describe('Share class ID'),
23
+ }),
24
+ handler: async (input, client) => {
25
+ const { data } = await client.get(`/api/v1/share-classes/${input.id}`);
26
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
27
+ },
28
+ },
29
+ {
30
+ name: 'create_share_class',
31
+ description: 'Create a new share class (e.g. Series B Preferred).',
32
+ inputSchema: z.object({
33
+ name: z.string().describe('Share class name, e.g. "Series A Preferred"'),
34
+ classType: z
35
+ .enum(['common', 'preferred', 'warrant', 'option'])
36
+ .describe('Type of share class'),
37
+ authorizedShares: z
38
+ .number()
39
+ .int()
40
+ .positive()
41
+ .describe('Total number of authorized shares'),
42
+ parValue: z.number().optional().describe('Par value per share in USD'),
43
+ companyId: z.string().describe('Company ID this share class belongs to'),
44
+ liquidationPreference: z
45
+ .number()
46
+ .optional()
47
+ .describe('Liquidation preference multiplier (e.g. 1 for 1x)'),
48
+ participationRights: z
49
+ .enum(['none', 'full', 'capped'])
50
+ .optional()
51
+ .describe('Participation rights type'),
52
+ }),
53
+ handler: async (input, client) => {
54
+ const { data } = await client.post('/api/v1/share-classes', input);
55
+ return {
56
+ content: [
57
+ { type: 'text', text: `Share class created: ${JSON.stringify(data, null, 2)}` },
58
+ ],
59
+ };
60
+ },
61
+ },
62
+ ];
63
+ //# sourceMappingURL=shareClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shareClasses.js","sourceRoot":"","sources":["../../src/tools/shareClasses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const stakeholderTools: ToolDefinition[];
3
+ //# sourceMappingURL=stakeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeholders.d.ts","sourceRoot":"","sources":["../../src/tools/stakeholders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAsE5C,CAAC"}
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ export const stakeholderTools = [
3
+ {
4
+ name: 'list_stakeholders',
5
+ description: 'List all stakeholders in the cap table. Returns name, email, role, and ownership details.',
6
+ inputSchema: z.object({
7
+ companyId: z.string().optional().describe('Filter by company ID'),
8
+ limit: z.number().optional().default(50).describe('Max results to return'),
9
+ }),
10
+ handler: async (input, client) => {
11
+ const { data } = await client.get('/api/v1/stakeholders', { params: input });
12
+ const stakeholders = data.stakeholders ?? data;
13
+ return {
14
+ content: [{ type: 'text', text: JSON.stringify(stakeholders, null, 2) }],
15
+ };
16
+ },
17
+ },
18
+ {
19
+ name: 'get_stakeholder',
20
+ description: 'Get details for a specific stakeholder by ID.',
21
+ inputSchema: z.object({
22
+ id: z.string().describe('Stakeholder ID'),
23
+ }),
24
+ handler: async (input, client) => {
25
+ const { data } = await client.get(`/api/v1/stakeholders/${input.id}`);
26
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
27
+ },
28
+ },
29
+ {
30
+ name: 'create_stakeholder',
31
+ description: 'Add a new stakeholder to the cap table.',
32
+ inputSchema: z.object({
33
+ name: z.string().describe('Full name'),
34
+ email: z.string().email().describe('Email address'),
35
+ role: z
36
+ .enum(['founder', 'investor', 'employee', 'advisor', 'other'])
37
+ .describe('Stakeholder role'),
38
+ companyId: z.string().describe('Company ID to add the stakeholder to'),
39
+ }),
40
+ handler: async (input, client) => {
41
+ const { data } = await client.post('/api/v1/stakeholders', input);
42
+ return {
43
+ content: [
44
+ { type: 'text', text: `Stakeholder created: ${JSON.stringify(data, null, 2)}` },
45
+ ],
46
+ };
47
+ },
48
+ },
49
+ {
50
+ name: 'update_stakeholder',
51
+ description: 'Update an existing stakeholder by ID.',
52
+ inputSchema: z.object({
53
+ id: z.string().describe('Stakeholder ID'),
54
+ name: z.string().optional().describe('Full name'),
55
+ email: z.string().email().optional().describe('Email address'),
56
+ role: z
57
+ .enum(['founder', 'investor', 'employee', 'advisor', 'other'])
58
+ .optional()
59
+ .describe('Stakeholder role'),
60
+ }),
61
+ handler: async (input, client) => {
62
+ const { id, ...body } = input;
63
+ const { data } = await client.put(`/api/v1/stakeholders/${id}`, body);
64
+ return {
65
+ content: [
66
+ { type: 'text', text: `Stakeholder updated: ${JSON.stringify(data, null, 2)}` },
67
+ ],
68
+ };
69
+ },
70
+ },
71
+ ];
72
+ //# sourceMappingURL=stakeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakeholders.js","sourceRoot":"","sources":["../../src/tools/stakeholders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const valuationTools: ToolDefinition[];
3
+ //# sourceMappingURL=valuations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuations.d.ts","sourceRoot":"","sources":["../../src/tools/valuations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,cAAc,EAqE1C,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { z } from 'zod';
2
+ export const valuationTools = [
3
+ {
4
+ name: 'get_latest_valuation',
5
+ description: 'Get the most recent 409A or board-approved valuation for the company.',
6
+ inputSchema: z.object({
7
+ companyId: z.string().describe('Company ID'),
8
+ }),
9
+ handler: async (input, client) => {
10
+ const { data } = await client.get(`/api/v1/valuations/latest`, { params: { companyId: input.companyId } });
11
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
12
+ },
13
+ },
14
+ {
15
+ name: 'get_valuation_history',
16
+ description: 'Get the historical valuation timeline for the company.',
17
+ inputSchema: z.object({
18
+ companyId: z.string().describe('Company ID'),
19
+ limit: z.number().optional().default(20).describe('Max results to return'),
20
+ }),
21
+ handler: async (input, client) => {
22
+ const { data } = await client.get('/api/v1/valuations', { params: input });
23
+ const valuations = data.valuations ?? data;
24
+ return {
25
+ content: [{ type: 'text', text: JSON.stringify(valuations, null, 2) }],
26
+ };
27
+ },
28
+ },
29
+ {
30
+ name: 'create_valuation_request',
31
+ description: 'Submit a new 409A valuation request or record a board-approved valuation.',
32
+ inputSchema: z.object({
33
+ companyId: z.string().describe('Company ID'),
34
+ valuationType: z
35
+ .enum(['409A', 'board_approved', 'preferred_round', 'other'])
36
+ .describe('Type of valuation'),
37
+ valuationDate: z.string().describe('Effective date in ISO 8601 format (YYYY-MM-DD)'),
38
+ commonStockFMV: z
39
+ .number()
40
+ .positive()
41
+ .describe('Fair market value per common share in USD'),
42
+ postMoneyValuation: z
43
+ .number()
44
+ .positive()
45
+ .optional()
46
+ .describe('Total post-money company valuation in USD'),
47
+ provider: z
48
+ .string()
49
+ .optional()
50
+ .describe('Name of the 409A valuation provider or firm'),
51
+ reportUrl: z
52
+ .string()
53
+ .url()
54
+ .optional()
55
+ .describe('URL to the valuation report document'),
56
+ }),
57
+ handler: async (input, client) => {
58
+ const { data } = await client.post('/api/v1/valuations', input);
59
+ return {
60
+ content: [
61
+ { type: 'text', text: `Valuation recorded: ${JSON.stringify(data, null, 2)}` },
62
+ ],
63
+ };
64
+ },
65
+ },
66
+ ];
67
+ //# sourceMappingURL=valuations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuations.js","sourceRoot":"","sources":["../../src/tools/valuations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ToolDefinition } from '../types.js';
2
+ export declare const waterfallTools: ToolDefinition[];
3
+ //# sourceMappingURL=waterfall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waterfall.d.ts","sourceRoot":"","sources":["../../src/tools/waterfall.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,cAAc,EA4C1C,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ export const waterfallTools = [
3
+ {
4
+ name: 'run_waterfall_analysis',
5
+ description: 'Run a waterfall analysis to model how exit proceeds would be distributed among ' +
6
+ 'stakeholders given their liquidation preferences, participation rights, and ownership. ' +
7
+ 'Returns proceeds per stakeholder and per share class at the given exit amount.',
8
+ inputSchema: z.object({
9
+ companyId: z.string().describe('Company ID'),
10
+ exitAmount: z
11
+ .number()
12
+ .positive()
13
+ .describe('Total exit/acquisition proceeds in USD'),
14
+ exitType: z
15
+ .enum(['acquisition', 'ipo', 'dissolution'])
16
+ .optional()
17
+ .default('acquisition')
18
+ .describe('Type of exit event'),
19
+ deductTransactionCosts: z
20
+ .boolean()
21
+ .optional()
22
+ .default(false)
23
+ .describe('Whether to deduct estimated transaction costs before distribution'),
24
+ transactionCostsAmount: z
25
+ .number()
26
+ .optional()
27
+ .describe('Transaction costs amount in USD (used if deductTransactionCosts is true)'),
28
+ includeOptionPoolSweep: z
29
+ .boolean()
30
+ .optional()
31
+ .default(false)
32
+ .describe('Whether to include pre-exit option pool sweep'),
33
+ asOfDate: z
34
+ .string()
35
+ .optional()
36
+ .describe('Run analysis as of a specific date (ISO 8601 YYYY-MM-DD). Defaults to today.'),
37
+ }),
38
+ handler: async (input, client) => {
39
+ const { data } = await client.post('/api/v1/waterfall/analyze', input);
40
+ return {
41
+ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
42
+ };
43
+ },
44
+ },
45
+ ];
46
+ //# sourceMappingURL=waterfall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waterfall.js","sourceRoot":"","sources":["../../src/tools/waterfall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,iFAAiF;YACjF,yFAAyF;YACzF,gFAAgF;QAClF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,wCAAwC,CAAC;YACrD,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;iBAC3C,QAAQ,EAAE;iBACV,OAAO,CAAC,aAAa,CAAC;iBACtB,QAAQ,CAAC,oBAAoB,CAAC;YACjC,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,mEAAmE,CAAC;YAChF,sBAAsB,EAAE,CAAC;iBACtB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0EAA0E,CAAC;YACvF,sBAAsB,EAAE,CAAC;iBACtB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,+CAA+C,CAAC;YAC5D,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8EAA8E,CAAC;SAC5F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACjE,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared types used across tools and the server.
3
+ */
4
+ import { type z } from 'zod';
5
+ import { type AxiosInstance } from 'axios';
6
+ import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ export type ToolResult = CallToolResult;
8
+ export interface ToolDefinition<TSchema extends z.ZodTypeAny = z.ZodTypeAny> {
9
+ name: string;
10
+ description: string;
11
+ inputSchema: TSchema;
12
+ handler: (input: z.infer<TSchema>, client: AxiosInstance) => Promise<ToolResult>;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAClF"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared types used across tools and the server.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@opencapstack/mcp-server",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for OpenCap Stack — manage your cap table via Claude, Cursor, and any MCP-compatible client",
5
+ "type": "module",
6
+ "bin": {
7
+ "opencap-mcp": "dist/index.js"
8
+ },
9
+ "main": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsx src/index.ts",
14
+ "test": "jest",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "dependencies": {
18
+ "@modelcontextprotocol/sdk": "^1.0.0",
19
+ "axios": "^1.6.0",
20
+ "zod": "^3.22.0",
21
+ "zod-to-json-schema": "^3.25.2"
22
+ },
23
+ "devDependencies": {
24
+ "@types/express": "^5.0.6",
25
+ "@types/jest": "^29.5.0",
26
+ "@types/node": "^20.0.0",
27
+ "express": "^5.2.1",
28
+ "jest": "^29.7.0",
29
+ "ts-jest": "^29.1.0",
30
+ "tsx": "^4.0.0",
31
+ "typescript": "^5.3.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18.0.0"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "jest": {
40
+ "preset": "ts-jest/presets/default-esm",
41
+ "testEnvironment": "node",
42
+ "extensionsToTreatAsEsm": [
43
+ ".ts"
44
+ ],
45
+ "moduleNameMapper": {
46
+ "^(\\.{1,2}/.*)\\.js$": "$1"
47
+ },
48
+ "transform": {
49
+ "^.+\\.tsx?$": [
50
+ "ts-jest",
51
+ {
52
+ "useESM": true
53
+ }
54
+ ]
55
+ }
56
+ }
57
+ }