@autopo/mcp 0.0.0-stage → 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.
- package/LICENSE +21 -0
- package/README.md +119 -2
- package/dist/api.d.ts +51 -0
- package/dist/api.js +107 -0
- package/dist/api.js.map +1 -0
- package/dist/apps.d.ts +10 -0
- package/dist/apps.js +146 -0
- package/dist/apps.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +63 -0
- package/dist/cli.js.map +1 -0
- package/dist/guides.d.ts +3 -0
- package/dist/guides.js +52 -0
- package/dist/guides.js.map +1 -0
- package/dist/http.d.ts +20 -0
- package/dist/http.js +119 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/kit.d.ts +149 -0
- package/dist/kit.js +206 -0
- package/dist/kit.js.map +1 -0
- package/dist/prompts.d.ts +3 -0
- package/dist/prompts.js +44 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +4 -0
- package/dist/resources.js +40 -0
- package/dist/resources.js.map +1 -0
- package/dist/server.d.ts +24 -0
- package/dist/server.js +40 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/company.d.ts +4 -0
- package/dist/tools/company.js +431 -0
- package/dist/tools/company.js.map +1 -0
- package/dist/tools/marketing.d.ts +4 -0
- package/dist/tools/marketing.js +214 -0
- package/dist/tools/marketing.js.map +1 -0
- package/dist/tools/studio.d.ts +9 -0
- package/dist/tools/studio.js +363 -0
- package/dist/tools/studio.js.map +1 -0
- package/dist/ui/gallery.html +124 -0
- package/dist/ui/home.html +124 -0
- package/dist/ui/inbox.html +124 -0
- package/dist/ui/money.html +124 -0
- package/dist/ui/storyboard.html +124 -0
- package/package.json +71 -4
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** What a client can read as resources: the guides, a company's home and brand brain, the API's OpenAPI document. */
|
|
2
|
+
import { ResourceTemplate } from '@modelcontextprotocol/server';
|
|
3
|
+
import { STUDIO_GUIDE, TEASER_GUIDE } from './guides.js';
|
|
4
|
+
export function registerResources(server, s) {
|
|
5
|
+
server.registerResource('studio-guide', 'autopoiesis://guide/studio', {
|
|
6
|
+
title: 'Studio guide',
|
|
7
|
+
description: 'How films, images, voice and music are made in the Studio, which model for which job, and how to direct the Creative Director.',
|
|
8
|
+
mimeType: 'text/markdown',
|
|
9
|
+
}, async (uri) => ({ contents: [{ uri: uri.href, mimeType: 'text/markdown', text: STUDIO_GUIDE }] }));
|
|
10
|
+
server.registerResource('teaser-guide', 'autopoiesis://guide/teaser', {
|
|
11
|
+
title: 'Making a teaser',
|
|
12
|
+
description: 'The teaser loop from a terminal, tool by tool: brief, storyboard, keyframes, clips, render.',
|
|
13
|
+
mimeType: 'text/markdown',
|
|
14
|
+
}, async (uri) => ({ contents: [{ uri: uri.href, mimeType: 'text/markdown', text: TEASER_GUIDE }] }));
|
|
15
|
+
server.registerResource('openapi', 'autopoiesis://openapi', {
|
|
16
|
+
title: 'REST API (OpenAPI)',
|
|
17
|
+
description: 'The platform’s OpenAPI document: every endpoint api_request can call.',
|
|
18
|
+
mimeType: 'application/json',
|
|
19
|
+
}, async (uri) => ({ contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(await s.schema()) }] }));
|
|
20
|
+
const companies = new ResourceTemplate('autopoiesis://company/{company}/home', {
|
|
21
|
+
list: async () => ({
|
|
22
|
+
resources: (await s.companies()).map((c) => ({ uri: `autopoiesis://company/${c.id}/home`, name: `${c.name}: home`, mimeType: 'application/json' })),
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
server.registerResource('company-home', companies, {
|
|
26
|
+
title: 'A company’s home',
|
|
27
|
+
description: 'What needs you, what improved and what is stuck: the home screen as JSON.',
|
|
28
|
+
mimeType: 'application/json',
|
|
29
|
+
}, async (uri, variables) => ({
|
|
30
|
+
contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(await s.api.get(`/api/companies/${String(variables.company)}/home`)) }],
|
|
31
|
+
}));
|
|
32
|
+
server.registerResource('company-brand', new ResourceTemplate('autopoiesis://company/{company}/brand', { list: undefined }), {
|
|
33
|
+
title: 'A company’s brand brain',
|
|
34
|
+
description: 'What the company says about itself, for whom, against whom, in what voice.',
|
|
35
|
+
mimeType: 'application/json',
|
|
36
|
+
}, async (uri, variables) => ({
|
|
37
|
+
contents: [{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(await s.api.get(`/api/companies/${String(variables.company)}/marketing/brain`)) }],
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** The Autopoiesis MCP server: one person's tool on the platform, as them. */
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
3
|
+
export declare const VERSION = "0.1.1";
|
|
4
|
+
export declare const DEFAULT_API_URL = "https://autopoiesis-api-267405155162.us-west1.run.app";
|
|
5
|
+
export declare const DEFAULT_APP_URL = "https://app.autopoiesis.app";
|
|
6
|
+
/** The cell mark, served by the landing site (an inline data URI would ride along on every result). */
|
|
7
|
+
export declare const ICON: {
|
|
8
|
+
src: string;
|
|
9
|
+
mimeType: string;
|
|
10
|
+
sizes: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare const INSTRUCTIONS: string;
|
|
13
|
+
export interface ServerOptions {
|
|
14
|
+
/** The person's token: a personal access token (apk_…) from Connectors → MCP, or the app's JWT. */
|
|
15
|
+
token: string;
|
|
16
|
+
apiUrl?: string;
|
|
17
|
+
appUrl?: string;
|
|
18
|
+
/** This server's public address when hosted (names the Claude sandbox domain for the views). */
|
|
19
|
+
publicUrl?: string;
|
|
20
|
+
/** Extra origins the views may load media from. */
|
|
21
|
+
mediaDomains?: string[];
|
|
22
|
+
fetch?: typeof fetch;
|
|
23
|
+
}
|
|
24
|
+
export declare function createServer(options: ServerOptions): McpServer;
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** The Autopoiesis MCP server: one person's tool on the platform, as them. */
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/server';
|
|
3
|
+
import { Api } from './api.js';
|
|
4
|
+
import { Session } from './kit.js';
|
|
5
|
+
import { registerApps } from './apps.js';
|
|
6
|
+
import { registerPrompts } from './prompts.js';
|
|
7
|
+
import { registerResources } from './resources.js';
|
|
8
|
+
import { registerCompanyTools } from './tools/company.js';
|
|
9
|
+
import { registerMarketingAndApiTools } from './tools/marketing.js';
|
|
10
|
+
import { registerStudioTools } from './tools/studio.js';
|
|
11
|
+
export const VERSION = '0.1.1';
|
|
12
|
+
export const DEFAULT_API_URL = 'https://autopoiesis-api-267405155162.us-west1.run.app';
|
|
13
|
+
export const DEFAULT_APP_URL = 'https://app.autopoiesis.app';
|
|
14
|
+
/** The cell mark, served by the landing site (an inline data URI would ride along on every result). */
|
|
15
|
+
export const ICON = { src: 'https://autopoiesis.app/favicon.svg', mimeType: 'image/svg+xml', sizes: ['any'] };
|
|
16
|
+
export const INSTRUCTIONS = [
|
|
17
|
+
'Autopoiesis runs a person\'s AI-run company: a team of agents (CEO, CTO, engineers, Rose the Creative Director, marketers) that works on tasks, asks the founder for decisions in the Board inbox, delivers artifacts, makes media and videos in the Studio and posts for the company. You act as the signed-in person, in their companies, with their permissions.',
|
|
18
|
+
'Start with list_companies (pass `company` when they have several; otherwise you are asked) and founder_home. Read before you write.',
|
|
19
|
+
'Anything that spends credits (generate_media, make_video_media, video_keyframes) or decides something (decide, create_posts, cancel_task, delete_video) opens a confirmation dialog for the person; never work around it. Costs are shown in that dialog.',
|
|
20
|
+
'A teaser video: the make_a_teaser prompt, or the guide at autopoiesis://guide/teaser. Agents answer through ask_agent; a video is best made with the Creative Director beside it (ask_agent creative, with `production`). api_request reaches every other endpoint; api_reference is the manual. open_in_app opens a page of the web app.',
|
|
21
|
+
].join(' ');
|
|
22
|
+
export function createServer(options) {
|
|
23
|
+
const apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\/+$/, '');
|
|
24
|
+
const api = new Api({ baseUrl: apiUrl, token: options.token, userAgent: `autopoiesis-mcp/${VERSION}`, ...(options.fetch ? { fetch: options.fetch } : {}) });
|
|
25
|
+
const session = new Session({
|
|
26
|
+
api,
|
|
27
|
+
appUrl: options.appUrl ?? DEFAULT_APP_URL,
|
|
28
|
+
...(options.mediaDomains ? { mediaDomains: options.mediaDomains } : {}),
|
|
29
|
+
...(options.publicUrl ? { publicUrl: options.publicUrl } : {}),
|
|
30
|
+
});
|
|
31
|
+
const server = new McpServer({ name: 'autopoiesis', title: 'Autopoiesis', version: VERSION, description: 'Your AI-run company, from your own tool.', websiteUrl: 'https://autopoiesis.app', icons: [ICON] }, { instructions: INSTRUCTIONS, capabilities: { logging: {} } });
|
|
32
|
+
registerCompanyTools(server, session);
|
|
33
|
+
registerStudioTools(server, session);
|
|
34
|
+
registerMarketingAndApiTools(server, session);
|
|
35
|
+
registerPrompts(server);
|
|
36
|
+
registerResources(server, session);
|
|
37
|
+
registerApps(server, session);
|
|
38
|
+
return server;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAA;AAC9B,MAAM,CAAC,MAAM,eAAe,GAAG,uDAAuD,CAAA;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAE5D,uGAAuG;AACvG,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,qCAAqC,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;AAE7G,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,qWAAqW;IACrW,qIAAqI;IACrI,2PAA2P;IAC3P,2UAA2U;CAC5U,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAcX,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,mBAAmB,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3J,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,eAAe;QACzC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,0CAA0C,EAAE,UAAU,EAAE,yBAAyB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,EAC9K,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC9D,CAAA;IACD,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7C,eAAe,CAAC,MAAM,CAAC,CAAA;IACvB,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The company at a glance, briefings, the Board inbox, tasks and requests, the team and its chats, runs, knowledge. */
|
|
2
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
3
|
+
import { Session } from '../kit.js';
|
|
4
|
+
export declare function registerCompanyTools(server: McpServer, s: Session): void;
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { pick, rows, trimmed } from '../api.js';
|
|
3
|
+
import { COMPANY_ARG, PAGE_ARGS, ToolError, ask, choice, confirm, define, isInputRequired, resolveCompany, text, textField } from '../kit.js';
|
|
4
|
+
const TASK_KEYS = ['id', 'key', 'title', 'status', 'priority', 'assignee', 'assignee_name', 'created_at', 'updated_at', 'goal', 'parent_id', 'waiting_on', 'shortfall'];
|
|
5
|
+
const AGENT_KEYS = ['id', 'name', 'role_key', 'title', 'status', 'enabled', 'model'];
|
|
6
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
/** A chat's last reply once it is done, or what it has so far when the wait runs out. */
|
|
8
|
+
async function waitReply(s, chatId, wait, signal) {
|
|
9
|
+
const deadline = Date.now() + Math.max(0, Math.min(wait ?? 90, 300)) * 1000;
|
|
10
|
+
for (;;) {
|
|
11
|
+
const session = (await s.api.get(`/api/chats/${chatId}`));
|
|
12
|
+
const messages = session.messages ?? [];
|
|
13
|
+
const reply = [...messages].reverse().find((m) => m.role === 'agent');
|
|
14
|
+
const streaming = reply?.status === 'streaming';
|
|
15
|
+
if (!reply || !streaming || Date.now() >= deadline || signal?.aborted) {
|
|
16
|
+
return {
|
|
17
|
+
chat: chatId,
|
|
18
|
+
title: session.title ?? null,
|
|
19
|
+
reply: reply
|
|
20
|
+
? {
|
|
21
|
+
status: reply.status ?? null,
|
|
22
|
+
content: reply.content ?? null,
|
|
23
|
+
error: reply.error ?? null,
|
|
24
|
+
run_id: reply.run_id ?? null,
|
|
25
|
+
actions: (reply.actions ?? []).map((a) => ({ id: a.id, kind: a.kind, title: a.title, status: a.status, payload: a.payload })),
|
|
26
|
+
}
|
|
27
|
+
: null,
|
|
28
|
+
note: reply && streaming ? 'Still answering: call read_chat with this chat id in a moment.' : null,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
await sleep(2000);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function registerCompanyTools(server, s) {
|
|
35
|
+
// --- the company at a glance ---------------------------------------------------------------------------------------------
|
|
36
|
+
define(server, s, 'list_companies', {
|
|
37
|
+
title: 'List companies',
|
|
38
|
+
description: 'The companies you belong to (id, name, stage, kind). Other tools take `company`: one of these ids. Start here.',
|
|
39
|
+
group: 'company',
|
|
40
|
+
}, async () => ({ results: (await s.companies()).map((c) => pick(c, ['id', 'name', 'tagline', 'stage', 'kind', 'status', 'role'])) }));
|
|
41
|
+
define(server, s, 'whoami', {
|
|
42
|
+
title: 'Who am I',
|
|
43
|
+
description: 'The signed-in person: name, email, preferences, and how many companies they are in.',
|
|
44
|
+
group: 'company',
|
|
45
|
+
}, async () => {
|
|
46
|
+
const me = (await s.api.get('/api/me'));
|
|
47
|
+
const companies = await s.companies();
|
|
48
|
+
return { ...pick(me, ['id', 'email', 'full_name', 'avatar_url', 'email_verified', 'personal_workspace_id']), companies: companies.length };
|
|
49
|
+
});
|
|
50
|
+
define(server, s, 'founder_home', {
|
|
51
|
+
title: 'Founder home',
|
|
52
|
+
description: "What needs you, what improved and what is stuck in a company right now: the home screen's digest, the open decisions, running work, delivered work and your requests. Start here for 'what happened'.",
|
|
53
|
+
input: { ...COMPANY_ARG },
|
|
54
|
+
group: 'company',
|
|
55
|
+
ui: 'ui://autopoiesis/home.html',
|
|
56
|
+
}, async (args, ctx) => {
|
|
57
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
58
|
+
if (isInputRequired(cid))
|
|
59
|
+
return cid;
|
|
60
|
+
const home = (await s.api.get(`/api/companies/${cid}/home`));
|
|
61
|
+
return { company: cid, ...home };
|
|
62
|
+
});
|
|
63
|
+
define(server, s, 'company_overview', {
|
|
64
|
+
title: 'Company overview',
|
|
65
|
+
description: 'The company: its charter, stage, team, budget and gates.',
|
|
66
|
+
input: { ...COMPANY_ARG },
|
|
67
|
+
group: 'company',
|
|
68
|
+
}, async (args, ctx) => {
|
|
69
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
70
|
+
if (isInputRequired(cid))
|
|
71
|
+
return cid;
|
|
72
|
+
const [company, overview] = await Promise.all([s.api.get(`/api/companies/${cid}`), s.api.get(`/api/companies/${cid}/overview`)]);
|
|
73
|
+
return { company, overview };
|
|
74
|
+
});
|
|
75
|
+
define(server, s, 'activity', {
|
|
76
|
+
title: 'Activity feed',
|
|
77
|
+
description: "The company's activity feed, newest first (who did what, when). `after`: only events after this ISO time.",
|
|
78
|
+
input: { ...COMPANY_ARG, after: z.string().optional(), limit: z.number().int().min(1).max(100).optional() },
|
|
79
|
+
group: 'company',
|
|
80
|
+
}, async (args, ctx) => {
|
|
81
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
82
|
+
if (isInputRequired(cid))
|
|
83
|
+
return cid;
|
|
84
|
+
return trimmed(await s.api.get(`/api/companies/${cid}/activity`, { after: args.after }), args.limit ?? 40);
|
|
85
|
+
});
|
|
86
|
+
// --- briefings -----------------------------------------------------------------------------------------------------
|
|
87
|
+
define(server, s, 'list_briefings', {
|
|
88
|
+
title: 'List briefings',
|
|
89
|
+
description: "The CEO's board briefings (spoken updates), newest first, with their text.",
|
|
90
|
+
input: { ...COMPANY_ARG, before: z.string().optional().describe('ISO time: older than this') },
|
|
91
|
+
group: 'briefings',
|
|
92
|
+
}, async (args, ctx) => {
|
|
93
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
94
|
+
if (isInputRequired(cid))
|
|
95
|
+
return cid;
|
|
96
|
+
return s.api.get(`/api/companies/${cid}/briefings`, { before: args.before });
|
|
97
|
+
});
|
|
98
|
+
define(server, s, 'get_briefing', {
|
|
99
|
+
title: 'Get briefing',
|
|
100
|
+
description: 'One briefing: its sections, the decisions it asked for, and what was said.',
|
|
101
|
+
input: { briefing: z.string() },
|
|
102
|
+
group: 'briefings',
|
|
103
|
+
}, async (args) => s.api.get(`/api/briefings/${args.briefing}`));
|
|
104
|
+
define(server, s, 'brief_me_now', {
|
|
105
|
+
title: 'Brief me now',
|
|
106
|
+
description: 'Ask the CEO for a fresh briefing since your last one (at most 3 a day). It is written and voiced in the background: read it with get_briefing in a minute.',
|
|
107
|
+
input: { ...COMPANY_ARG },
|
|
108
|
+
group: 'briefings',
|
|
109
|
+
kind: 'write',
|
|
110
|
+
}, async (args, ctx) => {
|
|
111
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
112
|
+
if (isInputRequired(cid))
|
|
113
|
+
return cid;
|
|
114
|
+
return s.api.post(`/api/companies/${cid}/briefings/generate`);
|
|
115
|
+
});
|
|
116
|
+
// --- the Board inbox -----------------------------------------------------------------------------------------------
|
|
117
|
+
define(server, s, 'list_decisions', {
|
|
118
|
+
title: 'Inbox',
|
|
119
|
+
description: 'The Board inbox: cards waiting for you (`status` pending, default), or decided ones. Each card says what the team wants, why, the risk tier and the amount; decide with `decide`.',
|
|
120
|
+
input: { ...COMPANY_ARG, status: z.string().optional().describe('pending (default), decided, or a comma list'), ...PAGE_ARGS },
|
|
121
|
+
group: 'inbox',
|
|
122
|
+
ui: 'ui://autopoiesis/inbox.html',
|
|
123
|
+
}, async (args, ctx) => {
|
|
124
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
125
|
+
if (isInputRequired(cid))
|
|
126
|
+
return cid;
|
|
127
|
+
const data = await s.api.get(`/api/companies/${cid}/approvals`, { status: args.status ?? 'pending', page: args.page, page_size: args.page_size });
|
|
128
|
+
return { company: cid, ...trimmed(data) };
|
|
129
|
+
});
|
|
130
|
+
define(server, s, 'get_decision', {
|
|
131
|
+
title: 'Get decision',
|
|
132
|
+
description: "One inbox card in full: the ask, the agent's case, the options, the work behind it.",
|
|
133
|
+
input: { decision: z.string() },
|
|
134
|
+
group: 'inbox',
|
|
135
|
+
ui: 'ui://autopoiesis/inbox.html',
|
|
136
|
+
}, async (args) => {
|
|
137
|
+
const card = (await s.api.get(`/api/approvals/${args.decision}`));
|
|
138
|
+
return { results: [card], count: 1, more: false, single: true };
|
|
139
|
+
});
|
|
140
|
+
define(server, s, 'decide', {
|
|
141
|
+
title: 'Decide a card',
|
|
142
|
+
description: "Decide an inbox card as the founder: approve, reject (a `note` is required) or cancel. For a question card, `answer` is the chosen option's value. `edited_input` approves with a change to what was asked. You are asked to confirm in a dialog before it is final.",
|
|
143
|
+
input: {
|
|
144
|
+
decision: z.string().describe("the card's id"),
|
|
145
|
+
choice: z.enum(['approve', 'reject', 'cancel']),
|
|
146
|
+
note: z.string().optional(),
|
|
147
|
+
answer: z.union([z.string(), z.number(), z.boolean(), z.record(z.string(), z.unknown())]).optional().describe('for a question card: the chosen option value'),
|
|
148
|
+
edited_input: z.record(z.string(), z.unknown()).optional(),
|
|
149
|
+
},
|
|
150
|
+
group: 'inbox',
|
|
151
|
+
kind: 'destructive',
|
|
152
|
+
}, async (args, ctx) => {
|
|
153
|
+
const card = (await s.api.get(`/api/approvals/${args.decision}`));
|
|
154
|
+
const title = card.title ?? 'this card';
|
|
155
|
+
const amount = card.amount ?? (typeof card.amount_cents === 'number' ? `$${(card.amount_cents / 100).toFixed(2)}` : '');
|
|
156
|
+
const verb = args.choice === 'approve' ? 'Approve' : args.choice === 'reject' ? 'Reject' : 'Cancel';
|
|
157
|
+
const got = (await import('../kit.js')).answer(ctx, 'decide');
|
|
158
|
+
if (got === undefined) {
|
|
159
|
+
return ask('decide', `${verb} "${title}"${amount ? ` (${amount})` : ''}?${args.note ? ` Note: ${args.note}` : ''}`, {
|
|
160
|
+
go: choice('Decision', [{ value: 'yes', label: `Yes, ${verb.toLowerCase()} it` }, { value: 'no', label: 'No, leave it open' }]),
|
|
161
|
+
note: textField('A note for the team (required when rejecting)', undefined, { maxLength: 1000 }),
|
|
162
|
+
}, ['go']);
|
|
163
|
+
}
|
|
164
|
+
if (got === null || got.go !== 'yes')
|
|
165
|
+
return text('Left open: nothing was decided.');
|
|
166
|
+
const note = args.note ?? got.note ?? '';
|
|
167
|
+
if (args.choice === 'reject' && !note.trim())
|
|
168
|
+
return text('Not rejected: a note is required when rejecting. Call decide again with `note`.');
|
|
169
|
+
const body = { decision: args.choice };
|
|
170
|
+
if (note.trim())
|
|
171
|
+
body.note = note;
|
|
172
|
+
if (args.answer)
|
|
173
|
+
body.answer = args.answer;
|
|
174
|
+
if (args.edited_input)
|
|
175
|
+
body.edited_input = args.edited_input;
|
|
176
|
+
return s.api.post(`/api/approvals/${args.decision}/decide`, body);
|
|
177
|
+
});
|
|
178
|
+
define(server, s, 'comment_on_decision', {
|
|
179
|
+
title: 'Comment on a card',
|
|
180
|
+
description: 'Ask the team something about a card before deciding; the requesting agent answers.',
|
|
181
|
+
input: { decision: z.string(), body: z.string() },
|
|
182
|
+
group: 'inbox',
|
|
183
|
+
kind: 'write',
|
|
184
|
+
}, async (args) => s.api.post(`/api/approvals/${args.decision}/comments`, { body: args.body }));
|
|
185
|
+
// --- tasks and requests --------------------------------------------------------------------------------------------
|
|
186
|
+
define(server, s, 'list_tasks', {
|
|
187
|
+
title: 'List tasks',
|
|
188
|
+
description: 'The work board: tasks by status, assignee role or goal; `q` searches titles; `mine: true` only what you asked for (your requests).',
|
|
189
|
+
input: { ...COMPANY_ARG, status: z.string().optional(), assignee: z.string().optional().describe('a role key, e.g. engineer'), q: z.string().optional(), mine: z.boolean().optional(), ...PAGE_ARGS },
|
|
190
|
+
group: 'tasks',
|
|
191
|
+
}, async (args, ctx) => {
|
|
192
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
193
|
+
if (isInputRequired(cid))
|
|
194
|
+
return cid;
|
|
195
|
+
let data;
|
|
196
|
+
if (args.mine) {
|
|
197
|
+
const me = (await s.api.get('/api/me'));
|
|
198
|
+
const all = rows(await s.api.get(`/api/companies/${cid}/tasks`, { view: 'board' }));
|
|
199
|
+
data = all.filter((t) => {
|
|
200
|
+
const by = t.created_by;
|
|
201
|
+
return by?.type === 'user' && String(by.id) === String(me.id);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
data = await s.api.get(`/api/companies/${cid}/tasks`, { status: args.status, assignee: args.assignee, q: args.q, page: args.page, page_size: args.page_size });
|
|
206
|
+
}
|
|
207
|
+
const out = trimmed(data);
|
|
208
|
+
return { company: cid, ...out, results: out.results.map((t) => pick(t, TASK_KEYS)) };
|
|
209
|
+
});
|
|
210
|
+
define(server, s, 'get_task', {
|
|
211
|
+
title: 'Get task',
|
|
212
|
+
description: "One task in full: description, criteria, status, the thread's last comments, its pull requests and deliverables.",
|
|
213
|
+
input: { task: z.string().describe('its id or key (AUTO-12)') },
|
|
214
|
+
group: 'tasks',
|
|
215
|
+
}, async (args) => {
|
|
216
|
+
const [task, comments] = await Promise.all([s.api.get(`/api/tasks/${args.task}`), s.api.get(`/api/tasks/${args.task}/comments`, { page_size: 20 })]);
|
|
217
|
+
return { task, comments: trimmed(comments, 20) };
|
|
218
|
+
});
|
|
219
|
+
define(server, s, 'create_task', {
|
|
220
|
+
title: 'Create task',
|
|
221
|
+
description: 'Give the team work, or make a request of your own (the CEO routes it when no assignee is named): a title, what done looks like, criteria. `assignee` is an agent id (list_agents).',
|
|
222
|
+
input: {
|
|
223
|
+
...COMPANY_ARG,
|
|
224
|
+
title: z.string(),
|
|
225
|
+
description: z.string().optional(),
|
|
226
|
+
assignee: z.string().optional(),
|
|
227
|
+
priority: z.enum(['low', 'medium', 'high', 'urgent']).optional(),
|
|
228
|
+
acceptance_criteria: z.array(z.string()).optional(),
|
|
229
|
+
goal: z.string().optional(),
|
|
230
|
+
},
|
|
231
|
+
group: 'tasks',
|
|
232
|
+
kind: 'write',
|
|
233
|
+
}, async (args, ctx) => {
|
|
234
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
235
|
+
if (isInputRequired(cid))
|
|
236
|
+
return cid;
|
|
237
|
+
const body = { title: args.title };
|
|
238
|
+
if (args.description)
|
|
239
|
+
body.description = args.description;
|
|
240
|
+
if (args.priority)
|
|
241
|
+
body.priority = args.priority;
|
|
242
|
+
if (args.acceptance_criteria)
|
|
243
|
+
body.acceptance_criteria = args.acceptance_criteria;
|
|
244
|
+
if (args.assignee)
|
|
245
|
+
body.assignee_id = args.assignee;
|
|
246
|
+
if (args.goal)
|
|
247
|
+
body.goal_id = args.goal;
|
|
248
|
+
return s.api.post(`/api/companies/${cid}/tasks`, body);
|
|
249
|
+
});
|
|
250
|
+
define(server, s, 'update_task', {
|
|
251
|
+
title: 'Update task',
|
|
252
|
+
description: 'Change a task: its title, description, status, priority, assignee or criteria.',
|
|
253
|
+
input: { task: z.string(), title: z.string().optional(), description: z.string().optional(), status: z.string().optional(), priority: z.string().optional(), assignee: z.string().optional(), acceptance_criteria: z.array(z.string()).optional() },
|
|
254
|
+
group: 'tasks',
|
|
255
|
+
kind: 'write',
|
|
256
|
+
}, async (args) => {
|
|
257
|
+
const body = {};
|
|
258
|
+
for (const key of ['title', 'description', 'status', 'priority', 'acceptance_criteria'])
|
|
259
|
+
if (args[key] !== undefined)
|
|
260
|
+
body[key] = args[key];
|
|
261
|
+
if (args.assignee !== undefined)
|
|
262
|
+
body.assignee_id = args.assignee;
|
|
263
|
+
return s.api.patch(`/api/tasks/${args.task}`, body);
|
|
264
|
+
});
|
|
265
|
+
define(server, s, 'comment_on_task', {
|
|
266
|
+
title: 'Comment on task',
|
|
267
|
+
description: "Write in a task's thread as the founder: the assignee reads it and answers (a comment wakes them).",
|
|
268
|
+
input: { task: z.string(), body: z.string() },
|
|
269
|
+
group: 'tasks',
|
|
270
|
+
kind: 'write',
|
|
271
|
+
}, async (args) => s.api.post(`/api/tasks/${args.task}/comments`, { body: args.body }));
|
|
272
|
+
define(server, s, 'cancel_task', {
|
|
273
|
+
title: 'Cancel task',
|
|
274
|
+
description: 'Cancel a task (and its open subtasks, pending cards and live runs). `preview: true` only says what it would take. You confirm in a dialog before it is final.',
|
|
275
|
+
input: { task: z.string(), reason: z.string().optional(), preview: z.boolean().optional() },
|
|
276
|
+
group: 'tasks',
|
|
277
|
+
kind: 'destructive',
|
|
278
|
+
}, async (args, ctx) => {
|
|
279
|
+
if (args.preview)
|
|
280
|
+
return s.api.get(`/api/tasks/${args.task}/cancel`);
|
|
281
|
+
const preview = (await s.api.get(`/api/tasks/${args.task}/cancel`));
|
|
282
|
+
const parts = [
|
|
283
|
+
preview.subtasks?.length ? `${preview.subtasks.length} subtasks` : '',
|
|
284
|
+
preview.runs?.length ? `${preview.runs.length} live runs` : '',
|
|
285
|
+
preview.approvals?.length ? `${preview.approvals.length} pending cards` : '',
|
|
286
|
+
].filter(Boolean);
|
|
287
|
+
const ok = confirm(ctx, 'cancel', `Cancel "${preview.title ?? args.task}"${parts.length ? ` and its ${parts.join(', ')}` : ''}? This cannot be undone.`, 'Yes, cancel it', 'No, keep it');
|
|
288
|
+
if (ok !== true)
|
|
289
|
+
return ok;
|
|
290
|
+
return s.api.post(`/api/tasks/${args.task}/cancel`, { reason: args.reason ?? '' });
|
|
291
|
+
});
|
|
292
|
+
// --- the team and its chats ----------------------------------------------------------------------------------------
|
|
293
|
+
define(server, s, 'list_agents', {
|
|
294
|
+
title: 'List agents',
|
|
295
|
+
description: 'The team: every agent with its role, title, state and whether it is on. Chat with one through ask_agent.',
|
|
296
|
+
input: { ...COMPANY_ARG },
|
|
297
|
+
group: 'team',
|
|
298
|
+
}, async (args, ctx) => {
|
|
299
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
300
|
+
if (isInputRequired(cid))
|
|
301
|
+
return cid;
|
|
302
|
+
return { company: cid, results: rows(await s.api.get(`/api/companies/${cid}/agents`)).map((a) => pick(a, AGENT_KEYS)) };
|
|
303
|
+
});
|
|
304
|
+
define(server, s, 'ask_agent', {
|
|
305
|
+
title: 'Ask an agent',
|
|
306
|
+
description: "Start a chat with an agent (list_agents) and wait for the answer. `agent` is the agent's id or role key (ceo, cto, creative…). Beside the Studio, pass `production` (a video id) so the Creative Director sees that video. The reply's `actions` are proposals (a task, media to make, a card): apply one with apply_chat_action. `wait_seconds` (default 90, max 300) is how long to wait for the reply.",
|
|
307
|
+
input: { ...COMPANY_ARG, agent: z.string(), message: z.string(), production: z.string().optional(), wait_seconds: z.number().int().optional() },
|
|
308
|
+
group: 'team',
|
|
309
|
+
kind: 'write',
|
|
310
|
+
}, async (args, ctx) => {
|
|
311
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
312
|
+
if (isInputRequired(cid))
|
|
313
|
+
return cid;
|
|
314
|
+
const ref = args.agent.trim();
|
|
315
|
+
const agents = rows(await s.api.get(`/api/companies/${cid}/agents`));
|
|
316
|
+
const agent = agents.find((a) => a.id === ref) ?? agents.find((a) => a.role_key === ref.toLowerCase());
|
|
317
|
+
if (!agent)
|
|
318
|
+
throw new ToolError(`No agent '${ref}' in this company (list_agents).`);
|
|
319
|
+
const body = { message: args.message };
|
|
320
|
+
if (args.production)
|
|
321
|
+
body.context = { page: 'studio', production: args.production };
|
|
322
|
+
const session = (await s.api.post(`/api/agents/${agent.id}/chats`, body));
|
|
323
|
+
return waitReply(s, session.id, args.wait_seconds, ctx.signal);
|
|
324
|
+
});
|
|
325
|
+
define(server, s, 'continue_chat', {
|
|
326
|
+
title: 'Continue chat',
|
|
327
|
+
description: 'Send another message in an existing chat and wait for the reply.',
|
|
328
|
+
input: { chat: z.string(), message: z.string(), wait_seconds: z.number().int().optional() },
|
|
329
|
+
group: 'team',
|
|
330
|
+
kind: 'write',
|
|
331
|
+
}, async (args, ctx) => {
|
|
332
|
+
await s.api.post(`/api/chats/${args.chat}/messages`, { content: args.message });
|
|
333
|
+
return waitReply(s, args.chat, args.wait_seconds, ctx.signal);
|
|
334
|
+
});
|
|
335
|
+
define(server, s, 'read_chat', {
|
|
336
|
+
title: 'Read chat',
|
|
337
|
+
description: "A chat's messages, oldest first (the last reply's status says whether it is still answering).",
|
|
338
|
+
input: { chat: z.string(), last: z.number().int().min(1).max(50).optional().describe('only the last N messages') },
|
|
339
|
+
group: 'team',
|
|
340
|
+
}, async (args) => {
|
|
341
|
+
const session = (await s.api.get(`/api/chats/${args.chat}`));
|
|
342
|
+
const last = args.last ?? 20;
|
|
343
|
+
return {
|
|
344
|
+
id: session.id,
|
|
345
|
+
title: session.title,
|
|
346
|
+
agent: session.agent,
|
|
347
|
+
messages: (session.messages ?? []).slice(-last).map((m) => ({
|
|
348
|
+
id: m.id, role: m.role, content: m.content, status: m.status, error: m.error, created_at: m.created_at,
|
|
349
|
+
actions: (m.actions ?? []).map((a) => ({ id: a.id, kind: a.kind, title: a.title, status: a.status })),
|
|
350
|
+
})),
|
|
351
|
+
};
|
|
352
|
+
});
|
|
353
|
+
define(server, s, 'list_chats', {
|
|
354
|
+
title: 'List chats',
|
|
355
|
+
description: 'Your chats across the team (pinned first, then recent); `q` searches titles and content.',
|
|
356
|
+
input: { ...COMPANY_ARG, q: z.string().optional(), agent: z.string().optional() },
|
|
357
|
+
group: 'team',
|
|
358
|
+
}, async (args, ctx) => {
|
|
359
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
360
|
+
if (isInputRequired(cid))
|
|
361
|
+
return cid;
|
|
362
|
+
return trimmed(await s.api.get(`/api/companies/${cid}/chats`, { q: args.q, agent: args.agent }), 30);
|
|
363
|
+
});
|
|
364
|
+
define(server, s, 'apply_chat_action', {
|
|
365
|
+
title: 'Apply a chat proposal',
|
|
366
|
+
description: "Apply a proposal an agent made in a chat (a task, a note, media to make, a card): the action's id from the reply's `actions`. `edits` changes fields of its payload first. `dismiss: true` declines it.",
|
|
367
|
+
input: { action: z.string(), edits: z.record(z.string(), z.unknown()).optional(), dismiss: z.boolean().optional() },
|
|
368
|
+
group: 'team',
|
|
369
|
+
kind: 'write',
|
|
370
|
+
}, async (args) => {
|
|
371
|
+
if (args.dismiss)
|
|
372
|
+
return s.api.post(`/api/chat-actions/${args.action}/dismiss`);
|
|
373
|
+
return s.api.post(`/api/chat-actions/${args.action}/apply`, args.edits ? { edits: args.edits } : {});
|
|
374
|
+
});
|
|
375
|
+
// --- runs ----------------------------------------------------------------------------------------------------------
|
|
376
|
+
define(server, s, 'list_runs', {
|
|
377
|
+
title: 'List runs',
|
|
378
|
+
description: 'Agent runs: `status` active (queued, running), finished, or a comma list; `agent` an agent id.',
|
|
379
|
+
input: { ...COMPANY_ARG, status: z.string().optional(), agent: z.string().optional(), ...PAGE_ARGS },
|
|
380
|
+
group: 'runs',
|
|
381
|
+
}, async (args, ctx) => {
|
|
382
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
383
|
+
if (isInputRequired(cid))
|
|
384
|
+
return cid;
|
|
385
|
+
return trimmed(await s.api.get(`/api/companies/${cid}/runs`, { status: args.status, agent: args.agent, page: args.page, page_size: args.page_size }), 30);
|
|
386
|
+
});
|
|
387
|
+
define(server, s, 'get_run', {
|
|
388
|
+
title: 'Get run',
|
|
389
|
+
description: 'One run: its status, cost, and its events (tool calls, text) from `after_seq`.',
|
|
390
|
+
input: { run: z.string(), after_seq: z.number().int().optional(), events: z.boolean().optional().describe('include the events (default true)') },
|
|
391
|
+
group: 'runs',
|
|
392
|
+
}, async (args) => {
|
|
393
|
+
const run = await s.api.get(`/api/runs/${args.run}`);
|
|
394
|
+
if (args.events === false)
|
|
395
|
+
return { run };
|
|
396
|
+
return { run, events: trimmed(await s.api.get(`/api/runs/${args.run}/events`, { after_seq: args.after_seq }), 200) };
|
|
397
|
+
});
|
|
398
|
+
define(server, s, 'nudge_run', {
|
|
399
|
+
title: 'Nudge a run',
|
|
400
|
+
description: 'Steer a run that is still going: a line of guidance the agent reads at its next step.',
|
|
401
|
+
input: { run: z.string(), guidance: z.string() },
|
|
402
|
+
group: 'runs',
|
|
403
|
+
kind: 'write',
|
|
404
|
+
}, async (args) => s.api.post(`/api/runs/${args.run}/nudges`, { guidance: args.guidance }));
|
|
405
|
+
// --- knowledge and deliverables ------------------------------------------------------------------------------------
|
|
406
|
+
define(server, s, 'list_artifacts', {
|
|
407
|
+
title: 'List artifacts',
|
|
408
|
+
description: 'What the team made: documents, research, decks, tables, videos, designs (`type`), delivered work, `q` searches, `starred` only yours.',
|
|
409
|
+
input: { ...COMPANY_ARG, type: z.string().optional(), status: z.string().optional(), q: z.string().optional(), starred: z.boolean().optional(), ...PAGE_ARGS },
|
|
410
|
+
group: 'knowledge',
|
|
411
|
+
}, async (args, ctx) => {
|
|
412
|
+
const cid = await resolveCompany(s, args, ctx);
|
|
413
|
+
if (isInputRequired(cid))
|
|
414
|
+
return cid;
|
|
415
|
+
return trimmed(await s.api.get(`/api/companies/${cid}/artifacts`, { type: args.type, status: args.status, q: args.q, starred: args.starred ? 1 : undefined, page: args.page, page_size: args.page_size }), 30);
|
|
416
|
+
});
|
|
417
|
+
define(server, s, 'get_artifact', {
|
|
418
|
+
title: 'Get artifact',
|
|
419
|
+
description: 'One artifact in full (its body, content, version, who made it).',
|
|
420
|
+
input: { artifact: z.string() },
|
|
421
|
+
group: 'knowledge',
|
|
422
|
+
}, async (args) => s.api.get(`/api/artifacts/${args.artifact}`));
|
|
423
|
+
define(server, s, 'artifact_feedback', {
|
|
424
|
+
title: 'Ask for a revision',
|
|
425
|
+
description: 'Ask for a revision of an artifact: a task for the agent who made it; the change lands as a new version.',
|
|
426
|
+
input: { artifact: z.string(), body: z.string() },
|
|
427
|
+
group: 'knowledge',
|
|
428
|
+
kind: 'write',
|
|
429
|
+
}, async (args) => s.api.post(`/api/artifacts/${args.artifact}/feedback`, { body: args.body }));
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=company.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/tools/company.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Marketing and social, money, and the rest of the API: any endpoint, the reference behind it, links into the app. */
|
|
2
|
+
import type { McpServer } from '@modelcontextprotocol/server';
|
|
3
|
+
import { Session } from '../kit.js';
|
|
4
|
+
export declare function registerMarketingAndApiTools(server: McpServer, s: Session): void;
|