@opencapstack/mcp-server 0.1.4 → 0.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,cAAc,EA0IrC,CAAC"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,cAAc,EAqKrC,CAAC"}
@@ -114,18 +114,43 @@ export const metaTools = [
114
114
  companyId: z.string().describe('Company ID'),
115
115
  }),
116
116
  handler: async (input, client) => {
117
- const [stakeholders, shareClasses, safes, equityPlans] = await Promise.all([
118
- client.get('/api/v1/stakeholders', { params: { companyId: input.companyId, limit: 100 } }),
119
- client.get('/api/v1/share-classes', { params: { companyId: input.companyId, limit: 100 } }),
120
- client.get('/api/v1/safes', { params: { companyId: input.companyId, limit: 100 } }),
121
- client.get('/api/v1/equity-plans', { params: { companyId: input.companyId, limit: 100 } }),
117
+ const params = { companyId: input.companyId, limit: 100 };
118
+ const [stakeholdersRes, shareClassesRes, safesRes, equityPlansRes, grantsRes] = await Promise.allSettled([
119
+ client.get('/api/v1/stakeholders', { params }),
120
+ client.get('/api/v1/share-classes', { params }),
121
+ client.get('/api/v1/safes', { params }),
122
+ client.get('/api/v1/equity-plans', { params }),
123
+ client.get('/api/v1/equity-grants', { params }),
122
124
  ]);
125
+ const extract = (res, keys) => {
126
+ if (res.status === 'rejected')
127
+ return [];
128
+ const d = res.value.data;
129
+ for (const k of keys) {
130
+ if (Array.isArray(d[k]))
131
+ return d[k];
132
+ }
133
+ return Array.isArray(d) ? d : [];
134
+ };
135
+ const stakeholders = extract(stakeholdersRes, ['stakeholders']);
136
+ const shareClasses = extract(shareClassesRes, ['shareClasses']);
137
+ const safes = extract(safesRes, ['safes']);
138
+ const equityPlans = extract(equityPlansRes, ['equityPlans']);
139
+ const grants = extract(grantsRes, ['grants']);
123
140
  const summary = {
124
141
  companyId: input.companyId,
125
- stakeholders: (stakeholders.data.stakeholders ?? stakeholders.data).length,
126
- shareClasses: (shareClasses.data.shareClasses ?? shareClasses.data).length,
127
- openSafes: (safes.data.safes ?? safes.data).filter((s) => s.status === 'open' || s.status === 'draft').length,
128
- equityPlans: (equityPlans.data.equityPlans ?? equityPlans.data).length,
142
+ stakeholders: stakeholders.length,
143
+ shareClasses: shareClasses.length,
144
+ openSafes: safes.filter((s) => s.status === 'open' || s.status === 'draft').length,
145
+ equityPlans: equityPlans.length,
146
+ activeGrants: grants.filter((g) => g.status === 'active').length,
147
+ unavailable: [
148
+ stakeholdersRes.status === 'rejected' ? 'stakeholders' : null,
149
+ shareClassesRes.status === 'rejected' ? 'share-classes' : null,
150
+ safesRes.status === 'rejected' ? 'safes' : null,
151
+ equityPlansRes.status === 'rejected' ? 'equity-plans' : null,
152
+ grantsRes.status === 'rejected' ? 'equity-grants' : null,
153
+ ].filter(Boolean),
129
154
  };
130
155
  return {
131
156
  content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opencapstack/mcp-server",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "MCP server for OpenCap Stack — manage your cap table via Claude, Cursor, and any MCP-compatible client",
5
5
  "type": "module",
6
6
  "bin": {
package/src/tools/meta.ts CHANGED
@@ -119,20 +119,47 @@ export const metaTools: ToolDefinition[] = [
119
119
  companyId: z.string().describe('Company ID'),
120
120
  }),
121
121
  handler: async (input, client) => {
122
- const [stakeholders, shareClasses, safes, equityPlans] = await Promise.all([
123
- client.get('/api/v1/stakeholders', { params: { companyId: input.companyId, limit: 100 } }),
124
- client.get('/api/v1/share-classes', { params: { companyId: input.companyId, limit: 100 } }),
125
- client.get('/api/v1/safes', { params: { companyId: input.companyId, limit: 100 } }),
126
- client.get('/api/v1/equity-plans', { params: { companyId: input.companyId, limit: 100 } }),
127
- ]);
122
+ const params = { companyId: input.companyId, limit: 100 };
123
+ const [stakeholdersRes, shareClassesRes, safesRes, equityPlansRes, grantsRes] =
124
+ await Promise.allSettled([
125
+ client.get('/api/v1/stakeholders', { params }),
126
+ client.get('/api/v1/share-classes', { params }),
127
+ client.get('/api/v1/safes', { params }),
128
+ client.get('/api/v1/equity-plans', { params }),
129
+ client.get('/api/v1/equity-grants', { params }),
130
+ ]);
131
+
132
+ const extract = (res: PromiseSettledResult<{ data: unknown }>, keys: string[]): unknown[] => {
133
+ if (res.status === 'rejected') return [];
134
+ const d = res.value.data as Record<string, unknown>;
135
+ for (const k of keys) {
136
+ if (Array.isArray(d[k])) return d[k] as unknown[];
137
+ }
138
+ return Array.isArray(d) ? d : [];
139
+ };
140
+
141
+ const stakeholders = extract(stakeholdersRes, ['stakeholders']);
142
+ const shareClasses = extract(shareClassesRes, ['shareClasses']);
143
+ const safes = extract(safesRes, ['safes']);
144
+ const equityPlans = extract(equityPlansRes, ['equityPlans']);
145
+ const grants = extract(grantsRes, ['grants']);
146
+
128
147
  const summary = {
129
148
  companyId: input.companyId,
130
- stakeholders: (stakeholders.data.stakeholders ?? stakeholders.data).length,
131
- shareClasses: (shareClasses.data.shareClasses ?? shareClasses.data).length,
132
- openSafes: (safes.data.safes ?? safes.data).filter(
133
- (s: { status?: string }) => s.status === 'open' || s.status === 'draft'
149
+ stakeholders: stakeholders.length,
150
+ shareClasses: shareClasses.length,
151
+ openSafes: (safes as { status?: string }[]).filter(
152
+ (s) => s.status === 'open' || s.status === 'draft'
134
153
  ).length,
135
- equityPlans: (equityPlans.data.equityPlans ?? equityPlans.data).length,
154
+ equityPlans: equityPlans.length,
155
+ activeGrants: (grants as { status?: string }[]).filter((g) => g.status === 'active').length,
156
+ unavailable: [
157
+ stakeholdersRes.status === 'rejected' ? 'stakeholders' : null,
158
+ shareClassesRes.status === 'rejected' ? 'share-classes' : null,
159
+ safesRes.status === 'rejected' ? 'safes' : null,
160
+ equityPlansRes.status === 'rejected' ? 'equity-plans' : null,
161
+ grantsRes.status === 'rejected' ? 'equity-grants' : null,
162
+ ].filter(Boolean),
136
163
  };
137
164
  return {
138
165
  content: [{ type: 'text', text: JSON.stringify(summary, null, 2) }],