Nimekumbuka kitu cha kukutuliza wewe mtoto wa Kibare. ☆☆☆. matumaini ya duka zaidi MCPs ni kila mahali na kwa sababu nzuri. Ni hatua inayofuata katika maendeleo ya programu. Kuwa na uwezo wa kutumia kila kitu kutoka kwa mazungumzo moja bila ya kufikia programu yoyote. ili kupanga machapisho yako yote ya kijamii kutoka kwa mazungumzo! Hivyo, nilianza kuchimba katika msimbo wa Postiz na kuongeza kwenye hilo! Posti ya ya Ripoti ya MCP ni ya ajabu Kila MCP ina usafiri, ambayo ni njia LLMs kutumia kuzungumza na mfumo wetu. Stdio, ambayo ni msingi wa mstari wa amri, na SSE. There are two primary methods at the moment Sijui kwa nini walichagua SSE - ni msingi wa maombi ya muda mrefu ambayo haina mwisho na huchapisha matukio kwa mteja. Tatizo la mbinu hii ni kwamba ili kutuma habari nyuma kwenye seva, unahitaji kutuma ombi la barua nyingine (kama SSE ni mawasiliano ya moja kwa moja), ambayo inamaanisha unahitaji kudumisha hali. Katika mfano wao, wanahifadhi hali katika kumbukumbu ya programu, na unadhani nini? Wengi wanatoa malalamiko juu ya upungufu wa kumbukumbu kwa sababu hali haifai wakati mtumiaji huacha kuunganisha. Napenda kutumia WebSockets. Wao wana mfumo wa kupumzika, na huna haja ya kudumisha hali kwa ajili yake. Kuingia katika Nilijikuta katika Anthropic typcript SDK na sikuwa na kushangaza. Inaonekana mbaya. Vitu vingi hazijawahi kutumika katika uzalishaji, kama vile "Vyombo." Njia ambayo wanahitaji kuhifadhi kila kitu duniani kote katika kumbukumbu ni maafa ya kusubiri kutokea. Pia, ni vigumu kutekeleza utambulisho na kupata mtumiaji kutoka kwa muktadha ili tuweze kupata maelezo yao. Postiz imejengwa na NestJS, hivyo wakati wa kutumia njia ya SSE, inafungia ufuatiliaji mara baada ya kuunganisha, kuruhusu kuondoa kila kitu kutoka kwa kumbukumbu. 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 {}; } } Wataalamu wa FTW ️ Hii ni kwa ajili yenu ikiwa wewe ni mtazamaji mkubwa wa mifumo ya OOP kama NestJS / Laravel / Spring. Niliunda decorator ya kushangaza ili kuunda zana kama API "endpoints." @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}`, }, ]; } Kodi zote zinaweza kupatikana katika Postiz hapa: https://github.com/gitroomhq/postiz-app/tree/main/libraries/nestjs-libraries/src/mcp Kwa hiyo hapa: HTTPS://github.com/gitroomhq/postiz-app/mcp/main/apps/backend/mcp Msisemi Shaykh Rabiy ́ ni Imaam wa Jarh wat-Ta ́diyl. Itakuwa nzuri kuwa na chaguo la kujengwa ili kulazimisha LLM kufanya mambo tofauti kabla ya kufikia mambo yetu. Kila wakati nilimwambia Cursor kupanga chapisho kwangu, alijaribu kupanga kwa 2024. Nilikuwa na haja ya kupita maelezo ya config, hivyo niliunda Inatarajia, LLM daima kuita hii kabla ya kufanya mambo. POSTIZ_CONFIGURATION_PRERUN Lakini alisahau mara nyingi (kwa kawaida), hivyo nililazimika kuwa na ubunifu. , Niliongeza mali mpya inayoitwa na kubadili jina la chombo cha config kwa Matokeo ya config ni: POSTIZ_SCHEDULE_POST configId POSTIZ_GET_CONFIG_ID. id: ${makeId(10)} Today date is ${dayjs.utc().format()} Ilichukua LLM daima kuita kabla, na tarehe ilikuwa imara! :) Ilikuwa hata bora kwangu kwa sababu nilijua itakuwa kutuma mimi UTC tarehe kutoka sasa. Matumizi ya kesi Nadhani inafanya kazi vizuri zaidi ikiwa ni pamoja na seti nyingi za zana, kwa mfano: ya ya ya ya Kuunganisha kwa Cursor na kuuliza kupanga chapisho kuhusu kazi yako leo. Kuunganisha na Notion na kuuliza kupanga kazi zote za hivi karibuni za timu kwenye vyombo vya habari vya kijamii - angalia MCPs za Composio. Kuunganisha kwenye SaaS yoyote ambayo ina CopilotKit na kupanga machapisho kulingana na programu. Ufafanuzi wa MCP ni chombo cha kupanga vyombo vya habari vya kijamii cha wazi - na sasa programu pekee ambayo inatoa MCP (kwa asili, sio na Zapier au kitu kama hicho) Posti ya Pamoja na MCP mpya, unaweza kupanga machapisho yako yote kutoka kwa wateja wa Cursor / Windsurf na Anthropic. Kila kitu ni 100% ya bure, bila shaka. :) Ikiwa unafurahia, tafadhali usisahau kuweka nyota yetu ⭐️ HTTPS://github.com/githroomhq/mfano