MCP सर्वर
SupDesk MCP (Model Context Protocol) सर्वर AI सहायकों और अन्य LLM-संचालित टूल को किसी प्रोजेक्ट के हेल्प सेंटर, फ़ीडबैक बोर्ड, चेंजलॉग, संदेश थ्रेड, बीटा प्रोग्राम और वेटलिस्ट तक सीधी पहुँच देता है।
एंडपॉइंट
https://mcp.supdesk.app/mcpप्रमाणीकरण
API कुंजी को Bearer टोकन के रूप में पास करें:
Authorization: Bearer sd_live_...SupDesk कंसोल में वर्कस्पेस सेटिंग्स → API कुंजियाँ के अंतर्गत कुंजियाँ बनाएँ।
कुंजी ही प्रोजेक्ट तय करती है, इसलिए कोई भी टूल project_id तर्क नहीं लेता — मॉडल के
अनुमान लगाने या ग़लत होने के लिए कुछ बचता ही नहीं।
आपको क्या मिलता है
कौन-से टूल दिखते हैं यह प्रोजेक्ट पर निर्भर करता है। प्रोजेक्ट सेटिंग्स में बंद की गई
सुविधा के टूल tools/list से पूरी तरह हटा दिए जाते हैं, ठीक वैसे ही जैसे REST API उन
रूट्स पर 404 देता है।
| समूह | टूल | आवश्यकता |
|---|---|---|
| हेल्प सेंटर | 10 | हेल्प सेंटर सक्षम |
| फ़ीडबैक बोर्ड | 5 | फ़ीडबैक बोर्ड सक्षम |
| चेंजलॉग | 5 | चेंजलॉग सक्षम |
| संदेश | 5 | निजी संदेश सक्षम |
| बीटा परीक्षण | 8 | बीटा सक्षम |
| वेटलिस्ट | 4 | वेटलिस्ट सक्षम |
| अवलोकन | 1 | हमेशा उपलब्ध |
पठन हर योजना पर काम करता है। लेखन के लिए सशुल्क योजना आवश्यक है — केवल-पठन कुंजी पर
बनाना, अपडेट करना या हटाना forbidden लौटाता है, जबकि उसी कुंजी से पठन ठीक काम करता है।
हेल्प सेंटर
list_articles— लेख, नवीनतम संपादन पहले। इसमें ड्राफ़्ट और संग्रहीत लेख शामिल हैं; ग्राहक जो देख सकते हैं उसके लिएstatusसे फ़िल्टर करें।get_article— id से एक लेख, उसके Markdown मुख्य पाठ सहित।search_articles— प्रकाशित लेखों पर पूर्ण-पाठ खोज, क्रमबद्ध, स्निपेट के साथ।create_article— एक ड्राफ़्ट बनाता है। प्रकाशन एक अलग कॉल है, इसलिए कुछ भी गलती से ग्राहकों तक नहीं पहुँचता।update_article— कोई भी फ़ील्ड पैच करें;statusकोpublishedयाarchivedपर सेट करें।delete_article— स्थायी; जिस लेख को रखना चाहते हैं उसे सेवा से हटाने के लिए संग्रहीत करें।list_article_categories,create_article_category,update_article_category,delete_article_category— श्रेणी हटाने पर उसके लेख यथावत रहते हैं, अवर्गीकृत।
लेख का मुख्य पाठ Markdown है, HTML नहीं। पोर्टल उन्हें ऐसे व्यूअर से रेंडर करता है जो HTML का मूल्यांकन कभी नहीं करता, इसलिए HTML पाठकों तक अक्षरशः पाठ के रूप में पहुँचता है।
योजना का लेख भत्ता समाप्त होते ही create_article limit_reached के साथ विफल होता है —
Free 5, Pro 50, Team असीमित।
फ़ीडबैक बोर्ड
list_feedback— पोस्ट, नवीनतम पहले। तीनों प्रकार (bug,feature,feedback) शामिल हैं जब तक आपtypeसे सीमित न करें।get_feedback,create_feedback,update_feedback—update_feedbackसे ही आप किसी पोस्ट कोbacklog → open → planned → in_progress → doneके साथ आगे बढ़ाते हैं।delete_feedback— पोस्ट, उसके वोट और उसकी टिप्पणियाँ हटा देता है।
चेंजलॉग, संदेश, बीटा और वेटलिस्ट
REST API के साथ पूर्ण समानता, उन्हीं क्वेरी पर:
- चेंजलॉग —
list_changelog,get_changelog_entry,create_changelog_entry,update_changelog_entry,delete_changelog_entry। प्रविष्टियाँ डिफ़ॉल्ट रूप से ड्राफ़्ट होती हैं, क्योंकि प्रकाशन ही आपके ग्राहकों को ईमेल भेजता है। - संदेश —
list_threads,get_thread(पूरे संदेश इतिहास के साथ),create_thread,reply_to_thread,update_thread। - बीटा परीक्षण —
list_beta_programs,get_beta_program,create_beta_program,update_beta_program,delete_beta_program,list_beta_testers,add_beta_tester,remove_beta_tester।add_beta_testerईमेल पर idempotent है और स्वीकृति टोकन लौटाता है; यह सर्वर कोई ईमेल नहीं भेजता, इसलिए आमंत्रण पहुँचाना आपका काम है। - वेटलिस्ट —
list_waitlist,add_waitlist_signup(ईमेल पर idempotent),update_waitlist_signup,remove_waitlist_signup।
अवलोकन
project_stats पूरे प्रोजेक्ट की गिनती लौटाता है — स्थिति के अनुसार फ़ीडबैक पोस्ट, खुले
थ्रेड, प्रकाशित और ड्राफ़्ट लेख, और उन लेखों को मिले मददगार / गैर-मददगार वोट — ताकि कोई
एजेंट चार पेजिनेटेड सूचियाँ छाने बिना बता सके कि “कितना बाकी है?”
संरचित आउटपुट
हर टूल एक outputSchema घोषित करता है और structuredContent (टाइप किया, सत्यापित) तथा
वही डेटा JSON के रूप में रखने वाला एक content टेक्स्ट ब्लॉक — दोनों लौटाता है। आपका
क्लाइंट जिसका समर्थन करे उसे पार्स करें।
const result = await mcpClient.callTool("get_article", { id: "8f7a..." });
result.structuredContent.article.title; // typed
JSON.parse(result.content[0].text); // same payload, fallbackएनोटेशन
हर टूल एनोटेशन रखता है ताकि क्लाइंट को कॉल करने से पहले पता हो कि वह क्या कॉल कर रहा है:
| एनोटेशन | किन पर सेट |
|---|---|
readOnlyHint: true | list_*, get_*, search_*, project_stats |
idempotentHint: true | पठन और update_* |
destructiveHint: true | delete_*, remove_* |
पेजिनेशन
सूची टूल एक अपारदर्शी cursor लेते हैं और next_cursor लौटाते हैं — अगले पृष्ठ के लिए
उसे वापस पास करें, और जब वह null हो तो रुक जाएँ।
let cursor;
do {
const page = await mcpClient.callTool("list_articles", { status: "published", cursor });
handle(page.structuredContent.data);
cursor = page.structuredContent.next_cursor;
} while (cursor);Cursor एक टोकन है, गणित नहीं — इसे अपारदर्शी मानें। विकृत cursor चुपचाप पहले पृष्ठ से
दोबारा शुरू करने के बजाय invalid_request लौटाता है, वरना पेजिनेटेड चक्र हमेशा के लिए
घूमता रहता।
ध्यान दें कि यह हर टूल की अपनी आर्ग्युमेंट स्कीमा में एक परंपरा है। MCP का प्रोटोकॉल-स्तरीय cursor टूल और संसाधनों की सूचियों पर लागू होता है, टूल जो लौटाता है उस पर नहीं; नीचे दी गई संसाधन सूची असली वाला उपयोग करती है।
संसाधन
टूल कॉल करके परिणाम चिपकाने के बजाय, प्रोजेक्ट सामग्री को संदर्भ के रूप में जोड़ने हेतु:
| URI | सामग्री |
|---|---|
supdesk://articles/{slug} | एक प्रकाशित हेल्प लेख, Markdown के रूप में। |
supdesk://board | प्रोजेक्ट की खुली फ़ीडबैक पोस्ट, JSON के रूप में। |
लेख सूची वास्तव में प्रोटोकॉल-पेजिनेटेड है, और इसमें केवल प्रकाशित लेख शामिल हैं — संसाधन वह सामग्री है जिसे क्लाइंट अक्षरशः दिखा सकता है, और ड्राफ़्ट किसी कारण से अप्रकाशित है।
प्रॉम्प्ट
प्रोजेक्ट के वास्तविक डेटा से जुड़े दो शुरुआती बिंदु:
draft_article_from_thread— हल हो चुकी सपोर्ट बातचीत को हेल्प-सेंटर लेख में बदलता है, ताकि उसी प्रश्न वाले अगले ग्राहक को थ्रेड खोलने के बजाय उत्तर मिल जाए। इसके लिए हेल्प सेंटर और निजी संदेश दोनों सक्षम होने चाहिए।triage_feedback— एक पोस्ट का आकलन करता है और तर्क सहित स्थिति की सिफ़ारिश करता है। यह पहलेsearch_articlesजाँचता है, ताकि नया काम प्रस्तावित करने के बजाय मौजूदा उत्तर सामने आ जाए।
दोनों अपने तर्कों के लिए MCP की completion क्षमता का उपयोग करते हैं: जैसे ही आप कोई श्रेणी टाइप करते हैं, सर्वर आपको अनुमान लगाने देने के बजाय प्रोजेक्ट के वास्तविक श्रेणी slug बताता है।
लॉगिंग
बहु-चरणीय लेखन MCP लॉगिंग पर प्रगति सूचनाएँ भेजते हैं — create_article योजना भत्ता
जाँचता है, खाली slug खोजता है, फिर सम्मिलित करता है, और हर चरण पर बताता है। जिस क्लाइंट
में लॉगिंग समर्थन नहीं है वह अप्रभावित रहता है; लेखन दोनों ही स्थितियों में आगे बढ़ता है।
उदाहरण
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json में जोड़ें:
{
"mcpServers": {
"sup-desk": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.supdesk.app/mcp",
"--header",
"Authorization: Bearer sd_live_..."
]
}
}
}किसी प्रश्न का उत्तर दें, या उत्तर लिखें
// Check whether the help center already covers it.
const hits = await mcpClient.callTool("search_articles", {
query: "reset password",
limit: 5
});
if (hits.structuredContent.data.length === 0) {
// Nothing yet — draft one. It's created as a draft.
const created = await mcpClient.callTool("create_article", {
title: "How do I reset my password?",
body: "Open **Settings**, then choose *Reset password*.",
category_id: "3c2b..."
});
// Publishing is deliberate and separate.
await mcpClient.callTool("update_article", {
id: created.structuredContent.article.id,
status: "published"
});
}बोर्ड को व्यवस्थित करें
const open = await mcpClient.callTool("list_feedback", {
status: "open",
limit: 10
});
await mcpClient.callTool("update_feedback", {
id: open.structuredContent.data[0].id,
status: "planned"
});सब कुछ जो बाकी है, एक ही कॉल में
const stats = await mcpClient.callTool("project_stats", {});
// { posts_by_status: { open: 12, planned: 3, ... }, open_threads: 4,
// articles_published: 18, articles_draft: 2,
// article_helpful: 240, article_not_helpful: 11 }दर सीमाएँ
MCP सर्वर REST API की सीमाएँ साझा करता है: प्रति प्रोजेक्ट 60 सेकंड में 120 अनुरोध। देखें दर सीमाएँ और उपयोग।
त्रुटियाँ
विफल टूल कॉल isError: true के साथ वही त्रुटि शब्दावली लौटाता है जो REST API उपयोग करता
है:
{
"error": {
"code": "limit_reached",
"message": "Your plan allows 5 help-center articles."
}
}| कोड | अर्थ |
|---|---|
unauthorized | अनुपस्थित, विकृत, रद्द या अज्ञात API कुंजी। |
forbidden | मान्य कुंजी, पर योजना में API लेखन पहुँच नहीं है। |
invalid_request | खराब तर्क — विकृत cursor सहित। |
not_found | इस प्रोजेक्ट में ऐसी कोई id नहीं। |
limit_reached | योजना का कोई भत्ता समाप्त हो गया (जैसे लेख सीमा)। |
rate_limited | वर्तमान विंडो में बहुत अधिक अनुरोध। |
internal_error | हमारी ओर से कुछ विफल हुआ। पुनः प्रयास सुरक्षित है। |
पूरी सूची त्रुटियाँ के अंतर्गत प्रलेखित है।