@buzzposter/mcp 0.1.11 → 0.1.13
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/dist/index.js +37 -6
- package/dist/tools.d.ts +6 -0
- package/dist/tools.js +37 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -121,6 +121,9 @@ var BuzzPosterClient = class {
|
|
|
121
121
|
async uploadFromUrl(data) {
|
|
122
122
|
return this.request("POST", "/api/v1/media/upload-from-url", data);
|
|
123
123
|
}
|
|
124
|
+
async uploadBase64(data) {
|
|
125
|
+
return this.request("POST", "/api/v1/media/upload-base64", data);
|
|
126
|
+
}
|
|
124
127
|
async getUploadUrl(data) {
|
|
125
128
|
return this.request("POST", "/api/v1/media/presign", data);
|
|
126
129
|
}
|
|
@@ -876,7 +879,7 @@ function registerAccountTools(server2, client2) {
|
|
|
876
879
|
);
|
|
877
880
|
server2.tool(
|
|
878
881
|
"check_accounts_health",
|
|
879
|
-
"Check the health status of all connected social media accounts. Shows which accounts are working, which have warnings, and which need
|
|
882
|
+
"Check the health status of all connected social media accounts. Shows which accounts are working, which have warnings, and which need attention. Call this before scheduling posts to make sure target platforms are healthy. If a token is expiring or an account shows an error, direct the user to reconnect via the BuzzPoster web UI -- reconnection cannot be done through MCP.",
|
|
880
883
|
{},
|
|
881
884
|
{
|
|
882
885
|
title: "Check Account Health",
|
|
@@ -1199,6 +1202,34 @@ function registerMediaTools(server2, client2) {
|
|
|
1199
1202
|
};
|
|
1200
1203
|
}
|
|
1201
1204
|
);
|
|
1205
|
+
server2.tool(
|
|
1206
|
+
"upload_from_claude",
|
|
1207
|
+
"Upload an image that the user has dropped or pasted into Claude. When a user shares an image in the conversation, Claude can read it natively as base64. Pass the base64 data, filename, and content_type to upload it to the BuzzPoster media library and get a CDN URL back. Do NOT show the base64 data to the user -- just call this tool silently and return the CDN URL.",
|
|
1208
|
+
{
|
|
1209
|
+
data: z4.string().describe("Base64-encoded image data (no data URI prefix needed, just the raw base64 string)"),
|
|
1210
|
+
filename: z4.string().describe("Filename including extension (e.g. photo.jpg)"),
|
|
1211
|
+
content_type: z4.string().describe("MIME type (e.g. image/jpeg, image/png, image/webp, image/gif)"),
|
|
1212
|
+
folder: z4.string().optional().describe("Optional folder path within the customer's storage")
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
title: "Upload Image from Claude",
|
|
1216
|
+
readOnlyHint: false,
|
|
1217
|
+
destructiveHint: false,
|
|
1218
|
+
idempotentHint: false,
|
|
1219
|
+
openWorldHint: false
|
|
1220
|
+
},
|
|
1221
|
+
async (args) => {
|
|
1222
|
+
const result = await client2.uploadBase64({
|
|
1223
|
+
data: args.data,
|
|
1224
|
+
filename: args.filename,
|
|
1225
|
+
content_type: args.content_type,
|
|
1226
|
+
folder: args.folder
|
|
1227
|
+
});
|
|
1228
|
+
return {
|
|
1229
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
1230
|
+
};
|
|
1231
|
+
}
|
|
1232
|
+
);
|
|
1202
1233
|
server2.tool(
|
|
1203
1234
|
"upload_from_url",
|
|
1204
1235
|
"Upload media from a public URL. The server fetches the image/video and uploads it to storage. Returns a CDN URL that can be used in posts. Supports JPEG, PNG, GIF, WebP, MP4, MOV, WebM up to 25MB.",
|
|
@@ -1729,7 +1760,7 @@ import { z as z7 } from "zod";
|
|
|
1729
1760
|
function registerBrandVoiceTools(server2, client2) {
|
|
1730
1761
|
server2.tool(
|
|
1731
1762
|
"get_brand_voice",
|
|
1732
|
-
"Get the customer's brand voice profile and writing rules. IMPORTANT: Call this tool BEFORE creating any post, draft, or content. Use the returned voice description, rules, and examples to match the customer's tone and style in everything you write for them. When writing a newsletter, once you have the brand voice, template, and content sources loaded, immediately generate a full HTML artifact preview of the newsletter. Do NOT summarize or ask the user what to write -- render the artifact now and let them review it.",
|
|
1763
|
+
"Get the customer's brand voice profile and writing rules. Returns: name, description, dos (array), donts (array), platformRules (per-platform object), and examplePosts (array). IMPORTANT: Call this tool BEFORE creating any post, draft, or content. Use the returned voice description, rules, and examples to match the customer's tone and style in everything you write for them. This tool is read-only -- to update brand voice use update_brand_voice. Do NOT store brand voice data in the knowledge base. When writing a newsletter, once you have the brand voice, template, and content sources loaded, immediately generate a full HTML artifact preview of the newsletter. Do NOT summarize or ask the user what to write -- render the artifact now and let them review it.",
|
|
1733
1764
|
{},
|
|
1734
1765
|
{
|
|
1735
1766
|
title: "Get Brand Voice",
|
|
@@ -1924,7 +1955,7 @@ import { z as z8 } from "zod";
|
|
|
1924
1955
|
function registerKnowledgeTools(server2, client2) {
|
|
1925
1956
|
server2.tool(
|
|
1926
1957
|
"get_knowledge_base",
|
|
1927
|
-
"Get all items from the customer's knowledge base. Use this to access reference material about the business, products, team, competitors, and other context that helps you write better content.",
|
|
1958
|
+
"Get all items from the customer's knowledge base. Use this to access reference material about the business, products, team, competitors, and other context that helps you write better content. The knowledge base is ONLY for uploaded documents, URLs, and text references (company info, products, pricing, competitors, stats). Do NOT use this to store or retrieve brand voice profiles or audience definitions -- those have dedicated tools.",
|
|
1928
1959
|
{},
|
|
1929
1960
|
{
|
|
1930
1961
|
title: "Get Knowledge Base",
|
|
@@ -1978,7 +2009,7 @@ function registerKnowledgeTools(server2, client2) {
|
|
|
1978
2009
|
);
|
|
1979
2010
|
server2.tool(
|
|
1980
2011
|
"search_knowledge",
|
|
1981
|
-
"Search the customer's knowledge base by tag or keyword. Use this to find specific reference material when writing about a topic.",
|
|
2012
|
+
"Search the customer's knowledge base by tag or keyword. Use this to find specific reference material when writing about a topic. Search by tag first for best results, falls back to text search. Do NOT use this to find brand voice or audience data -- those have dedicated tools.",
|
|
1982
2013
|
{
|
|
1983
2014
|
query: z8.string().describe(
|
|
1984
2015
|
"Search query - matches against tags first, then falls back to text search on title and content"
|
|
@@ -2029,7 +2060,7 @@ function registerKnowledgeTools(server2, client2) {
|
|
|
2029
2060
|
);
|
|
2030
2061
|
server2.tool(
|
|
2031
2062
|
"add_knowledge",
|
|
2032
|
-
"Add
|
|
2063
|
+
"Add reference material to the customer's knowledge base. Use ONLY for: company info, product details, pricing, team bios, competitor notes, brand guidelines, and statistics. Do NOT add brand voice profiles, audience profiles, or content drafts here -- those have dedicated tools. Always include relevant tags to make items easier to find later.",
|
|
2033
2064
|
{
|
|
2034
2065
|
title: z8.string().describe("Title for the knowledge item"),
|
|
2035
2066
|
content: z8.string().describe("The content/text to save"),
|
|
@@ -2071,7 +2102,7 @@ import { z as z9 } from "zod";
|
|
|
2071
2102
|
function registerAudienceTools(server2, client2) {
|
|
2072
2103
|
server2.tool(
|
|
2073
2104
|
"get_audience",
|
|
2074
|
-
"Get the target audience profile for content creation. Use this tool to understand WHO the content is for
|
|
2105
|
+
"Get the target audience profile for content creation. Use this tool to understand WHO the content is for. Returns: name, description, demographics, painPoints (array), motivations (array), toneNotes, contentPreferences, preferredPlatforms (array), and isDefault. Call this BEFORE writing any post or content so you can tailor messaging to resonate with the intended audience. Pass an audienceId to fetch a specific profile, or omit it to get the default. Use list_audiences to see all available profiles. Do NOT store audience data in the knowledge base.",
|
|
2075
2106
|
{
|
|
2076
2107
|
audienceId: z9.string().optional().describe("Specific audience profile ID. If omitted, returns the default audience.")
|
|
2077
2108
|
},
|
package/dist/tools.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ declare class BuzzPosterClient {
|
|
|
31
31
|
filename?: string;
|
|
32
32
|
folder?: string;
|
|
33
33
|
}): Promise<unknown>;
|
|
34
|
+
uploadBase64(data: {
|
|
35
|
+
data: string;
|
|
36
|
+
filename: string;
|
|
37
|
+
content_type: string;
|
|
38
|
+
folder?: string;
|
|
39
|
+
}): Promise<unknown>;
|
|
34
40
|
getUploadUrl(data: {
|
|
35
41
|
filename: string;
|
|
36
42
|
content_type: string;
|
package/dist/tools.js
CHANGED
|
@@ -115,6 +115,9 @@ var BuzzPosterClient = class {
|
|
|
115
115
|
async uploadFromUrl(data) {
|
|
116
116
|
return this.request("POST", "/api/v1/media/upload-from-url", data);
|
|
117
117
|
}
|
|
118
|
+
async uploadBase64(data) {
|
|
119
|
+
return this.request("POST", "/api/v1/media/upload-base64", data);
|
|
120
|
+
}
|
|
118
121
|
async getUploadUrl(data) {
|
|
119
122
|
return this.request("POST", "/api/v1/media/presign", data);
|
|
120
123
|
}
|
|
@@ -870,7 +873,7 @@ function registerAccountTools(server, client) {
|
|
|
870
873
|
);
|
|
871
874
|
server.tool(
|
|
872
875
|
"check_accounts_health",
|
|
873
|
-
"Check the health status of all connected social media accounts. Shows which accounts are working, which have warnings, and which need
|
|
876
|
+
"Check the health status of all connected social media accounts. Shows which accounts are working, which have warnings, and which need attention. Call this before scheduling posts to make sure target platforms are healthy. If a token is expiring or an account shows an error, direct the user to reconnect via the BuzzPoster web UI -- reconnection cannot be done through MCP.",
|
|
874
877
|
{},
|
|
875
878
|
{
|
|
876
879
|
title: "Check Account Health",
|
|
@@ -1193,6 +1196,34 @@ function registerMediaTools(server, client) {
|
|
|
1193
1196
|
};
|
|
1194
1197
|
}
|
|
1195
1198
|
);
|
|
1199
|
+
server.tool(
|
|
1200
|
+
"upload_from_claude",
|
|
1201
|
+
"Upload an image that the user has dropped or pasted into Claude. When a user shares an image in the conversation, Claude can read it natively as base64. Pass the base64 data, filename, and content_type to upload it to the BuzzPoster media library and get a CDN URL back. Do NOT show the base64 data to the user -- just call this tool silently and return the CDN URL.",
|
|
1202
|
+
{
|
|
1203
|
+
data: z4.string().describe("Base64-encoded image data (no data URI prefix needed, just the raw base64 string)"),
|
|
1204
|
+
filename: z4.string().describe("Filename including extension (e.g. photo.jpg)"),
|
|
1205
|
+
content_type: z4.string().describe("MIME type (e.g. image/jpeg, image/png, image/webp, image/gif)"),
|
|
1206
|
+
folder: z4.string().optional().describe("Optional folder path within the customer's storage")
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
title: "Upload Image from Claude",
|
|
1210
|
+
readOnlyHint: false,
|
|
1211
|
+
destructiveHint: false,
|
|
1212
|
+
idempotentHint: false,
|
|
1213
|
+
openWorldHint: false
|
|
1214
|
+
},
|
|
1215
|
+
async (args) => {
|
|
1216
|
+
const result = await client.uploadBase64({
|
|
1217
|
+
data: args.data,
|
|
1218
|
+
filename: args.filename,
|
|
1219
|
+
content_type: args.content_type,
|
|
1220
|
+
folder: args.folder
|
|
1221
|
+
});
|
|
1222
|
+
return {
|
|
1223
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
1224
|
+
};
|
|
1225
|
+
}
|
|
1226
|
+
);
|
|
1196
1227
|
server.tool(
|
|
1197
1228
|
"upload_from_url",
|
|
1198
1229
|
"Upload media from a public URL. The server fetches the image/video and uploads it to storage. Returns a CDN URL that can be used in posts. Supports JPEG, PNG, GIF, WebP, MP4, MOV, WebM up to 25MB.",
|
|
@@ -2459,7 +2490,7 @@ import { z as z8 } from "zod";
|
|
|
2459
2490
|
function registerBrandVoiceTools(server, client) {
|
|
2460
2491
|
server.tool(
|
|
2461
2492
|
"get_brand_voice",
|
|
2462
|
-
"Get the customer's brand voice profile and writing rules. IMPORTANT: Call this tool BEFORE creating any post, draft, or content. Use the returned voice description, rules, and examples to match the customer's tone and style in everything you write for them. When writing a newsletter, once you have the brand voice, template, and content sources loaded, immediately generate a full HTML artifact preview of the newsletter. Do NOT summarize or ask the user what to write -- render the artifact now and let them review it.",
|
|
2493
|
+
"Get the customer's brand voice profile and writing rules. Returns: name, description, dos (array), donts (array), platformRules (per-platform object), and examplePosts (array). IMPORTANT: Call this tool BEFORE creating any post, draft, or content. Use the returned voice description, rules, and examples to match the customer's tone and style in everything you write for them. This tool is read-only -- to update brand voice use update_brand_voice. Do NOT store brand voice data in the knowledge base. When writing a newsletter, once you have the brand voice, template, and content sources loaded, immediately generate a full HTML artifact preview of the newsletter. Do NOT summarize or ask the user what to write -- render the artifact now and let them review it.",
|
|
2463
2494
|
{},
|
|
2464
2495
|
{
|
|
2465
2496
|
title: "Get Brand Voice",
|
|
@@ -2654,7 +2685,7 @@ import { z as z9 } from "zod";
|
|
|
2654
2685
|
function registerKnowledgeTools(server, client) {
|
|
2655
2686
|
server.tool(
|
|
2656
2687
|
"get_knowledge_base",
|
|
2657
|
-
"Get all items from the customer's knowledge base. Use this to access reference material about the business, products, team, competitors, and other context that helps you write better content.",
|
|
2688
|
+
"Get all items from the customer's knowledge base. Use this to access reference material about the business, products, team, competitors, and other context that helps you write better content. The knowledge base is ONLY for uploaded documents, URLs, and text references (company info, products, pricing, competitors, stats). Do NOT use this to store or retrieve brand voice profiles or audience definitions -- those have dedicated tools.",
|
|
2658
2689
|
{},
|
|
2659
2690
|
{
|
|
2660
2691
|
title: "Get Knowledge Base",
|
|
@@ -2708,7 +2739,7 @@ function registerKnowledgeTools(server, client) {
|
|
|
2708
2739
|
);
|
|
2709
2740
|
server.tool(
|
|
2710
2741
|
"search_knowledge",
|
|
2711
|
-
"Search the customer's knowledge base by tag or keyword. Use this to find specific reference material when writing about a topic.",
|
|
2742
|
+
"Search the customer's knowledge base by tag or keyword. Use this to find specific reference material when writing about a topic. Search by tag first for best results, falls back to text search. Do NOT use this to find brand voice or audience data -- those have dedicated tools.",
|
|
2712
2743
|
{
|
|
2713
2744
|
query: z9.string().describe(
|
|
2714
2745
|
"Search query - matches against tags first, then falls back to text search on title and content"
|
|
@@ -2759,7 +2790,7 @@ function registerKnowledgeTools(server, client) {
|
|
|
2759
2790
|
);
|
|
2760
2791
|
server.tool(
|
|
2761
2792
|
"add_knowledge",
|
|
2762
|
-
"Add
|
|
2793
|
+
"Add reference material to the customer's knowledge base. Use ONLY for: company info, product details, pricing, team bios, competitor notes, brand guidelines, and statistics. Do NOT add brand voice profiles, audience profiles, or content drafts here -- those have dedicated tools. Always include relevant tags to make items easier to find later.",
|
|
2763
2794
|
{
|
|
2764
2795
|
title: z9.string().describe("Title for the knowledge item"),
|
|
2765
2796
|
content: z9.string().describe("The content/text to save"),
|
|
@@ -2801,7 +2832,7 @@ import { z as z10 } from "zod";
|
|
|
2801
2832
|
function registerAudienceTools(server, client) {
|
|
2802
2833
|
server.tool(
|
|
2803
2834
|
"get_audience",
|
|
2804
|
-
"Get the target audience profile for content creation. Use this tool to understand WHO the content is for
|
|
2835
|
+
"Get the target audience profile for content creation. Use this tool to understand WHO the content is for. Returns: name, description, demographics, painPoints (array), motivations (array), toneNotes, contentPreferences, preferredPlatforms (array), and isDefault. Call this BEFORE writing any post or content so you can tailor messaging to resonate with the intended audience. Pass an audienceId to fetch a specific profile, or omit it to get the default. Use list_audiences to see all available profiles. Do NOT store audience data in the knowledge base.",
|
|
2805
2836
|
{
|
|
2806
2837
|
audienceId: z10.string().optional().describe("Specific audience profile ID. If omitted, returns the default audience.")
|
|
2807
2838
|
},
|