I am pretty addicted to the Last Of Us series. Sorry for the cover.
😉MCPs are everywhere and for a good reason. It's the next step in the evolution of apps.
Being able to use everything from a single chat without accessing any app. It feels native for Postiz to schedule all your social posts from the chat! So, I started to dig into the Postiz code and added to it!
Postiz
The MCP Repository Is a Bit Weird
Cada mid ka mid ah MCP waxay ka mid ah shuruudaha, oo waa mid ka mid ah loo isticmaali karaa LLMs si ay u habboon our nidaamka.
Ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.
Waqtiga waxaa laga yaabaa in ka mid ah two primary methods at the moment
Eee, waxaan ka mid ah u baahan tahay in ay ka mid ah SSE-ka - waa mid ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka oo ka mid ah wax soo saarka.
Sidaalka waa in ay ku yaalaa in la soo saarka si aad u soo saarka, sidoo kale aad ka soo saarka wax soo saarka (si kastaba ka mid ah SSE waa mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah.
Waqtiga, waxay ku yaalaa xafiisyada ee app, oo ka mid ah? Markaad ka mid ah oo ka mid ah ka mid ah macluumaadka ah oo ka mid ah macluumaadka oo ka mid ah macluumaadka oo ka mid ah macluumaadka.
Waan loo isticmaalo WebSockets. Waxay ku habboonay in ay u habboon, oo aad u baahan yahay in ay ku habboon.
QalabkaDigging In
Waaq u dhismaha SDK-ka ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah ee codsiga ah.
Waax yar, waxaa laga yaabaa in la isticmaali karaa si ay u isticmaali karaa in la isticmaali karaa si ay u isticmaali karaa si ay u isticmaali karaa.
Waa soo dejisan "Transport" ah oo loo isticmaalo observables rxjs - waa fun. Postiz waxaa la aasaasay sida NestJS, sidaas oo loo isticmaalo router SSE, waxa uu ku yaalaa observable ka dib markii ay ka soo xiriir, si ay u baahan tahay si ay u qiyaasta oo dhan.
import EventEmitter from 'events'; import {finalize, from Event, startWith } from 'rxjs'; @Injectable() export class McpService { static event = new EventEmitter(); constructor( private _mainMcp: MainMcp ) { } async runServer(apiKey: string, organization: string) { const server(company, this._mainMcp).server(); const transport = new McpTransport(company); const observer = from Event(McpService.event), `transport-${Mcp.event, transport_transport_transport_###############################import EventEmitter from 'events';
import { finalize, fromEvent, startWith } from 'rxjs';
@Injectable()
export class McpService {
static event = new EventEmitter();
constructor(
private _mainMcp: MainMcp
) {
}
async runServer(apiKey: string, organization: string) {
const server = McpSettings.load(organization, this._mainMcp).server();
const transport = new McpTransport(organization);
const observer = fromEvent(
McpService.event,
`organization-${organization}`
).pipe(
startWith({
type: 'endpoint',
data: process.env.NEXT_PUBLIC_BACKEND_URL + '/mcp/' + apiKey + '/messages',
}),
finalize(() => {
transport.close();
})
);
console.log('MCP transport started');
await server.connect(transport);
return observer;
}
async processPostBody(organization: string, body: object) {
const server = McpSettings.load(organization, this._mainMcp).server();
const message = JSONRPCMessageSchema.parse(body);
const transport = new McpTransport(organization);
await server.connect(transport);
transport.handlePostMessage(message);
return {};
}
}
Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka
This waa for you if you are a big fan of OOP frameworks sida NestJS/Laravel/Spring. Waxaan loo helo decorator ah si ay u sameeyo qalabka sida API "endpoints."
Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticmaalka: Isticma @McpTool({ toolName: 'POSTIZ_GET_CONFIG_ID' })
async preRun() {
return [
{
type: 'text',
text: `id: ${makeId(10)} Today date is ${dayjs.utc().format()}`,
},
];
}
@McpTool({ toolName: 'POSTIZ_PROVIDERS_LIST' })
async listOfProviders(organization: string) {
const list = (
await this._integrationService.getIntegrationsList(organization)
).map((org) => ({
id: org.id,
name: org.name,
identifier: org.providerIdentifier,
picture: org.picture,
disabled: org.disabled,
profile: org.profile,
customer: org.customer
? {
id: org.customer.id,
name: org.customer.name,
}
: undefined,
}));
return [{ type: 'text', text: JSON.stringify(list) }];
}
@McpTool({
toolName: 'POSTIZ_SCHEDULE_POST',
zod: {
type: eenum(['draft', 'scheduled']),
configId: string(),
generatePictures: boolean(),
date: string().describe('UTC TIME'),
providerId: string().describe('Use POSTIZ_PROVIDERS_LIST to get the id'),
posts: array(object({ text: string(), images: array(string()) })),
},
})
async schedulePost(
organization: string,
obj: {
type: 'draft' | 'schedule';
generatePictures: boolean;
date: string;
providerId: string;
posts: { text: string }[];
}
) {
const create = await this._postsService.createPost(organization, {
date: obj.date,
type: obj.type,
tags: [],
posts: [
{
group: makeId(10),
value: await Promise.all(
obj.posts.map(async (post) => ({
content: post.text,
id: makeId(10),
image: !obj.generatePictures
? []
: [
{
id: makeId(10),
path: await this._openAiService.generateImage(
post.text,
true
),
},
],
}))
),
// @ts-ignore
settings: {},
integration: {
id: obj.providerId,
},
},
],
});
return [
{
type: 'text',
text: `Post created successfully, check it here: ${process.env.FRONTEND_URL}/p/${create[0].postId}`,
},
];
}
All the code can be found in Postiz here: https://github.com/gitroomhq/postiz-app/tree/main/libraries/nestjs-libraries/src/mcp
https://github.com/gitroomhq/postiz-app/tree/main/libraries/nestjs-libraries/src/mcp
And here: https://github.com/gitroomhq/postiz-app/tree/main/apps/backend/src/mcp
https://github.com/gitroomhq/postiz-app/tree/main/apps/backend/src/mcpQalabkaDiiwaanka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka
Oo, sidoo kale waxaa laga yaabaa in la isticmaalaa in la isticmaalaa in la isticmaalaa in la isticmaalaa in la isticmaalaa in la isticmaalaa in la isticmaalaa.
Wala soo xiriir wax soo saarka ah. Haddii aad ku yidhi Cursor si ay u helo post for me, waxa uu sheegay in loo helo in 2024.
Waaq u baahan tahay in la soo xiriir wax soo saarka config, sidaas waxaan loo helo POSTIZ_CONFIGURATION_PRERUN
tool.POSTIZ_CONFIGURATION_PRERUN
Haddii aad u baahan tahay in aad u baahan tahay in aad u baahan yahay. In aad POSTIZ_SCHEDULE_POST
, waxaan ku yaalaa aasaasay cusub oo ku yaalaa configId
oo uu u aragti wax soo saarka config in POSTIZ_GET_CONFIG_ID.
The output of the config is:id: ${makeId(10)} Today date is ${day.jsutc().format()}
POSTIZ_SCHEDULE_POST
configId
POSTIZ_GET_CONFIG_ID.
id: ${makeId(10)} Today date is ${dayjs.utc().format()}
Dhabka waxaa lagu dhigi karaa LLM oo dhan ka hor, oo loo yaabaa ku yaalaa! :)
Waqtiisa waxaa laga yaabaa in ay ku yaalaa in ay ku saabsan UTC ka hor.
QalabkaLaga soo xiriir
Waa'aalo in aad u shaqeeyaan ugu fiican in la isticmaalaa in la isticmaalaa in ka mid ah macluumaadka kala duwan, sida:
- Connect it to Cursor and ask it to schedule a post about your work today.
- Connect it to Notion and ask to schedule all the team's latest work on social media - check out Composio MCPs.
- Connect it to any SaaS that has CopilotKit and schedule posts based on the app.
Contact la Cursor iyo ka soo xiriir in ay soo xiriir post oo ku saabsan wax soo saarka. Connect it to Notion and ask to schedule all the team's latest work on social media - check out Composio MCPs. Composio MCPsConnect it to any SaaS that has CopilotKit and schedule posts based on the app. CopilotKitQalabkaXaabinta MCP
Postiz is the most robust open-source social media scheduling tool - and now the only scheduler that offers MCP (natively, not with Zapier or something like that)
Postiz
Wixii MCP cusub, sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale: Cursor/Windsurf iyo Anthropic clients.
Waaq oo dhan waa 100% free. :)
If you like it, please don't forget to star us ⭐️https://github.com/gitroomhq/postiz-app
https://github.com/gitroomhq/postiz-app
Marka: Br