ये वे knowledge base tools हैं जो Claude chat या Claude Code को osFoundry के MCP server से मिलते हैं। इन्हें 2026-11-08 को बिना authentication वाले tools/list से fetch किया गया और यहाँ काम की चीज़ों तक छोटा किया गया:
{"name": "search_knowledge_base", "description": "Search current published articles in one granted knowledge base. Results cite the article ID and updated time; this is a live database read.", "inputSchema": {"required": ["knowledge_base_id", "query"], "properties": {"query": {"type": "string", "minLength": 2, "maxLength": 200}, "limit": {"type": "integer", "minimum": 1, "maximum": 20}}}, "annotations": {"readOnlyHint": true}} {"name": "read_knowledge_article", "description": "Read one current published article by ID from a granted knowledge base and return a stable citation.", "inputSchema": {"required": ["knowledge_base_id", "article_id"]}, "annotations": {"readOnlyHint": true}} {"name": "edit_knowledge_article", "description": "Replace article content and optionally its title. Supply the version from read_knowledge_article; concurrent changes are rejected.", "inputSchema": {"required": ["knowledge_base_id", "article_id", "content", "expected_version", "idempotency_key"]}, "annotations": {"readOnlyHint": false, "destructiveHint": true, "openWorldHint": true}} {"name": "poll_resource_events", "description": "Resume from an event sequence for one granted channel, Note, knowledge base, record, or session.", "inputSchema": {"required": ["resource_type", "resource_id"], "properties": {"after_sequence": {"type": "integer", "minimum": 0}, "limit": {"type": "integer", "minimum": 1, "maximum": 100}}}, "annotations": {"readOnlyHint": true}} Descriptions को साथ में पढ़ें तो design अपने आप सामने आ जाता है। Search hit में article ID और updated time होता है। Read "a stable citation" (एक stable citation) लौटाता है। Edit को "the version from read_knowledge_article" (read_knowledge_article से मिला version) चाहिए। और हर knowledge base का एक event log है, जिसे किसी sequence number से resume किया जा सकता है। Citation में मौजूद updated time और edit में देना ज़रूरी version, practice में एक ही तरह की value हैं: इन tools के लिए osFoundry का अपना client, desktop app में connected-cloud-tools.ts, edit_knowledge_article के expected_version को format: date-time type देता है।
यानी citation सिर्फ़ reader के लिए pointer नहीं है। यह एक version stamp है, जिसे agent बाद में check कर सकता है और read के ठीक बाद compare-and-swap token की तरह वापस भेज सकता है। नीचे देखिए कि इससे क्या मिलता है, एक rebuild पर measure करके।
Citation में क्या होना चाहिए?
तीन candidates:
| Citation | Title बदलने के बाद भी टिकता है | Content बदला है, यह दिखाता है | Edit version के रूप में usable |
|---|---|---|---|
| Article title | नहीं | नहीं | नहीं |
| Article ID | हाँ | नहीं | नहीं |
| Article ID + updated time | हाँ | हाँ | हाँ, अगर fresh हो |
Human reader को title ही देखना होता है, इसलिए सिर्फ़ title से cite करना और बाद में उसे फिर से lookup करना आसान लगता है। लेकिन इससे सिर्फ़ वही article पकड़ में आता है जिसका नाम बदला गया या जिसे हटाया गया। जिस article का text उसी title के नीचे बदल गया, वह ठीक दिखता है। ID rename की समस्या हल करता है। Time ही staleness को check करने लायक बनाता है।
Rebuild
यहाँ कोई Claude binary नहीं चलता। kb_store.py चारों tools को sqlite पर implement करता है, live नामों, required arguments और limits के साथ (query 2–200 characters, search के लिए limit 20 तक और events के लिए 100 तक)। सिर्फ़ published articles ही search या read हो सकते हैं। JSON shapes rebuild के अपने हैं, क्योंकि live server इन्हें सिर्फ़ authenticated client को लौटाता है। Citation है {knowledge_base_id, article_id, updated_at}। हर save एक event {sequence, type, article_id, updated_at} लिखता है, और edit_knowledge_article एक BEGIN IMMEDIATE transaction में idempotency table के साथ updated_at पर compare-and-swap है।
sim.py support team का एक simulated दिन चलाता है:
- 400 articles, 120 सवाल, और 8 घंटों में लोगों के 300 saves।
- Popularity Zipf curve (s = 0.9) follow करती है। Top 10 articles को 36.7% सवाल और 36.7% saves मिलते हैं, क्योंकि लोग जिन articles के बारे में पूछते हैं, वही articles लोग बार-बार ठीक करते रहते हैं।
- Saves में से 85% content बदलते हैं, 10% साथ में title भी बदलते हैं, और 5% unpublish करते हैं।
- हर सवाल के लिए एक scripted "Claude"
search_knowledge_basecall करता है, top दो hits कोread_knowledge_articleसे पढ़ता है और दोनों citations रख लेता है। - हर घंटे वह अब तक दिए गए सभी citations को तीन तरीकों से check करता है।
Seeds 1–5, Apple M1 पर Python 3.9.6, सिर्फ़ stdlib। पूरा run 25.7 s लेता है।
Citations कितनी जल्दी stale होते हैं?
पाँच seeds, हर एक में 120 answers, हर answer में दो citations:
| घंटा | अब तक citations | Stale | Stale citation वाले answers | सिर्फ़ title check ने पकड़े |
|---|---|---|---|---|
| 1 | 152 | 24 (15.8%) | 56.6% | 24 में से 5 |
| 2 | 298 | 61 (20.5%) | 61.7% | 61 में से 17 |
| 4 | 580 | 165 (28.4%) | 72.1% | 165 में से 56 |
| 6 | 914 | 250 (27.4%) | 69.4% | 250 में से 84 |
| 8 | 1,200 | 369 (30.8%) | 80.2% | 369 में से 152 |
दिन के आख़िर तक लगभग एक तिहाई citations ऐसे article की ओर इशारा करते हैं जो Claude के पढ़ने के बाद बदल चुका है, और पाँच में से चार answers में कम से कम एक ऐसा citation है। "बदला हुआ" का मतलब "ग़लत" नहीं है: हो सकता है edit ने ऐसा paragraph छुआ हो जिसे answer ने कभी use ही नहीं किया। लेकिन बिना देखे कोई नहीं बता सकता कि कौन-सा केस है, और citation में मौजूद time ही Claude को बताता है कि कहाँ देखना है।
इसका ज़्यादातर हिस्सा popularity की वजह से है। Control run वही 300 saves सभी 400 articles पर बराबर बाँटता है: तब 13.9% citations stale होते हैं (1,200 में से 167) और 46.7% answers (600 में से 280)। आपका knowledge base जितना ज़्यादा use होता है, Claude जिन articles को cite करता है वे उतने ही ज़्यादा वही होते हैं जिन्हें edit किया जा रहा है।
सिर्फ़ title वाले check ने 369 में से 152 stale citations पकड़े, यानी 41.2%। ये सब retitle या unpublish थे। Content edit इसे कभी दिखता ही नहीं।
हर cited article दोबारा पढ़ें, या log poll करें?
पूरे दिन के hourly checks की cost, पाँचों seeds का जोड़ (40 checks):
| Strategy | Calls | लौटाया गया data | प्रति check |
|---|---|---|---|
| हर cited title को फिर से search करना | 2,426 | 3,342 KiB | 60.6 calls, 83.5 KiB |
| हर cited article को फिर से read करना | 2,264 | 3,445 KiB | 56.6 calls, 86.1 KiB |
Cursor से poll_resource_events | 40 | 153 KiB | 1.0 call, 3.8 KiB |
ID पर आधारित दोनों strategies ने ground truth जैसे ही ठीक वही 369 stale citations पकड़े। Script हर check पर इसे assert करती है। फ़र्क cost में है। Re-read इस पर scale करता है कि आपने कितने articles cite किए हैं, और हर बार उनका पूरा text pay करता है। Polling इस पर scale करता है कि कितने changes हुए। एक घंटे में 100 से कम changes एक page में आ जाते हैं, इसलिए हर check एक ही call था, और Claude सिर्फ़ उन्हीं articles को दोबारा पढ़ता है जो बदले। Cursor एक single integer है जिसे turns के बीच रखना होता है। पहले poll से पहले agent को शुरू करने के लिए एक sequence चाहिए, या तो 0 या वह आख़िरी sequence जो उसने अपने citations के साथ store किया था।
जब Claude citation वाले version से edit करता है तो क्या होता है?
दूसरा experiment वही दिन इस्तेमाल करता है। हर answer के बाद, कुछ delay पर, Claude अपने cite किए पहले article को edit करता है और citation का updated_at expected_version के रूप में भेजता है। पाँच seeds, हर delay पर 150 edits:
| Read के बाद delay | Reject, version आगे बढ़ गया | Reject, unpublish हो गया | Fresh read के बाद retry |
|---|---|---|---|
| 20 s | 0 (0.0%) | 0 | — |
| 15 min | 30 (20.0%) | 2 | 30 में से 30 saved |
| 1 h | 57 (38.0%) | 3 | 57 में से 57 saved |
| 4 h | 85 (56.7%) | 14 | 85 में से 85 saved |
Citation कुछ seconds तक अच्छा edit version है और एक घंटे बाद ख़राब। Rejections का मतलब है कि system अपना काम कर रहा है: वरना इनमें से हर write किसी व्यक्ति के नए text को पुराने read से बने content से replace कर देता। Fix mechanical है। फिर से पढ़ें, जो मौजूद है उस पर change दोबारा apply करें, नए version के साथ write करें। हर retry सफल रहा।
Idempotency key भी check की गई। हर successful edit के बाद वही call उसी key के साथ फिर से भेजी गई। 409 में से 409 ने पहला result replay के रूप में marked लौटाया और कोई नया event नहीं लिखा।
osFoundry सिर्फ़ published articles से ही जवाब क्यों देता है?
क्योंकि citation उस चीज़ की ओर इशारा करना चाहिए जिसे किसी व्यक्ति ने answer तय किया हो। Desktop app में article के Publishing tab पर लिखा है "Published articles are used by this workspace's AI assistant and search. They are not visible outside the workspace." (published articles इस workspace का AI assistant और search इस्तेमाल करते हैं, और ये workspace के बाहर नहीं दिखते)। Drafts search_knowledge_base और read_knowledge_article को दिखते ही नहीं, और unpublish किया गया article अगली call पर दोनों से हट जाता है। Rebuild में unpublish करना किसी भी दूसरे save की तरह एक event लिखता है। ऊपर के 600 delayed edits में से 19 ऐसे article पर पहुँचे जो unpublish हो चुका था, और check ऐसे citation को changed नहीं, बल्कि gone बताता है।
Edit tool को open-world क्यों mark किया गया है?
edit_knowledge_article अकेला knowledge base tool है जिसमें openWorldHint: true है। इसका असर conversation तक सीमित नहीं रहता। Saved article से ही workspace के बाकी सभी assistants और search आगे जवाब देते हैं। Annotations client को बताते हैं कि यह call shared state बदलती है, और Claude Code इसे चलाने से पहले पूछता है, जब तक आपने इसे allow न किया हो। जब कोई linked chat app के अंदर Knowledge Base screen से काम करता है, तो osFoundry अपना gate भी जोड़ता है: connected-browser-run.ts हर cloud write के लिए approval माँगता है और इनके लिए पूरे session का grant नहीं देता।
अगर आप इसे ख़ुद wire करते हैं
- Citation में सिर्फ़ ID नहीं, version भी रखें। वही value इस्तेमाल करें जो आपका edit tool
expected_versionके रूप में लेता है, ताकि एक read से दोनों मिल जाएँ। - हर knowledge base के लिए monotonic sequence वाला event log रखें, और agent को किसी number से resume करने दें। Client state का एक integer उस सब को दोबारा पढ़ने की जगह ले लेता है जो उसने कभी cite किया।
- सिर्फ़ published content से जवाब दें, और unpublish को event के रूप में log करें, ताकि citation सिर्फ़ "अलग" नहीं, "gone" के रूप में भी लौट सके।
- Edits को पूरे content पर compare-and-swap बनाएँ, required idempotency key के साथ। Tool description में model को बताएँ कि edit से पहले फिर से पढ़े, क्योंकि एक घंटे पुराने citation का version लगभग दस में से चार बार fail होता है।
- Write tool को destructive और open-world mark करें, और अपनी तरफ़ भी per-call approval रखें।
osFoundry retrieval और grounding से क्या समझता है, यह उसकी RAG glossary entry में है। उसके knowledge bases कैसे organised हैं, यह knowledge bases page पर है।



