אני די מכור לסדרה Last Of Us. Sorry about the cover.
😉 MCPs נמצאים בכל מקום מסיבה טובה.זה הצעד הבא בהתפתחות היישומים.
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
כל MCP יש תחבורה, שהיא השיטה שבה LLMs להשתמש כדי לדבר עם המערכת שלנו.
יש שתי שיטות עיקריות כרגע: Stdio, שהוא בעצם שורת פקודות, ו- SSE.
יש שתי שיטות עיקריות כרגע
אני לא ממש מבין למה הם בחרו ב- SSE – זה בעצם בקשה ארוכה שאינה נגמרת ומעבירה אירועים לקוח.
בדוגמה שלהם, הם מחזיקים את המצב בזיכרון של האפליקציה, ונחשו מה?
אני הייתי משתמש WebSockets. יש להם מצב שינה מובנה, ואתה לא צריך לשמור על מצב עבור זה.
» HRהתייחסות ל
חפצתי ב-Anthropic typcript SDK ולא הופתעתי. זה מרגיש מגוחך. דברים רבים אינם בשימוש בייצור, כגון "משאבים".
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 = 'endpoint', data.envoice.load(organization, this._mainMcp).server(); const transport = new McpTransport(organization); const observer = fromEvent(McP: MainMcp.event), `transport-${McService.event), `transport_transport_P> (transport_transport_P>; 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 {}; } }
חבילות נופש ️
זה בשבילך אם אתה מעריץ גדול של מסגרות OOP כמו NestJS/Laravel/Spring.[[מקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המקור: המ
@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/mcp» HRכוח LLM לעשות דברים 💪🏻
זה יהיה נחמד שיש אפשרות מובנית להכריח את LLM לעשות דברים שונים לפני שהוא מקבל גישה לדברים שלנו.
בכל פעם שאמרתי לקורסור לתזמן פוסט בשבילי, הוא ניסה לתזמן אותו לשנת 2024.
הייתי צריך להעביר כמה פרטים של הגדרות, אז יצרתי את הכלי
POSTIZ_CONFIGURATION_PRERUN
.POSTIZ_CONFIGURATION_PRERUN
ב
POSTIZ_SCHEDULE_POST
, הוספתי תכונה חדשה בשםconfigId
ושיניתי את שם כלי ההגדרה לPOSTIZ_GET_CONFIG_ID.
היציאה של ההגדרה היא:id: ${makeId(10)} תאריך היום הוא ${day.jsutc().format()}
POSTIZ_SCHEDULE_POST
configId
POSTIZ_GET_CONFIG_ID.
id: ${makeId(10)} Today date is ${dayjs.utc().format()}
זה הכריח את LLM תמיד להתקשר לזה קודם לכן, ואת התאריך נקבע! :)
זה היה אפילו יותר טוב בשבילי כי ידעתי שזה ישלח לי תאריכים UTC מעכשיו.
» HRמשתמשים
אני חושב שזה עובד הכי טוב כאשר הוא משולב עם מספר קבוצות של כלים, למשל:
- 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.
חבר אותו ל- Cursor ולבקש ממנו לתזמן פוסט על העבודה שלך היום. 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. CopilotKit» HRPostiz 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
עם MCP החדש, תוכל לתזמן את כל הפוסטים שלך מ- Cursor/Windsurf ו- Anthropic clients.
כל זה 100% בחינם כמובן. :)
If you like it, please don't forget to star us ⭐️https://github.com/gitroomhq/postiz-app
https://github.com/gitroomhq/postiz-app
» BR