इस guide के आख़िर तक, एक Claude conversation आपके किसी osFoundry Note के Sheet tab से cell range पढ़ती है, उसी Note का एक text tab दोबारा लिखती है और एक नया Slides tab जोड़ती है, जबकि कोई व्यक्ति उसी Note में typing करता रहता है। हर write में exact tab ID और Note का वह version होता है जो Claude ने आख़िरी बार पढ़ा था। अगर बीच में व्यक्ति ने कुछ save कर दिया, तो osFoundry Claude का write लौटा देता है और Claude retry से पहले फिर से पढ़ता है। किसी का edit गायब नहीं होता।
कौन क्या करता है
| Claude की तरफ़ | osFoundry की तरफ़ | |
|---|---|---|
| Login | आपका Claude account, बिना बदलाव | वह connection जिसे आपने एक workspace के लिए approve किया |
| कौन-सा Note | Server जो list करता है, उसमें से Claude चुनता है | सिर्फ़ उन projects के Notes जिनमें connection जोड़ा गया है |
| कौन-सा tab | Claude को exact tab_id भेजना होता है |
list_note_tabs हर tab instance लौटाता है, एक ही type की दो Sheets भी |
| Conflicts | Claude फिर से पढ़ता है और अपना बदलाव दोबारा करता है | Writes के साथ expected_version जाता है; पुराना version reject होता है, merge नहीं |
| Retries | Claude वही call दोबारा भेज सकता है | वही idempotency_key दो बार लिखने के बजाय पहला result लौटाता है |
| Approvals | हर write से पहले Claude का अपना tool-permission prompt | उस Note पर आपके मौजूदा edit rights, हर call पर check होते हैं |
Setup
Connector वही है जो Claude custom connector setup से बनता है (key icon → Connected → Add assistant, फिर Claude में https://api.osfoundry.io/api/v1/external-mcp जोड़ें)। नीचे के steps मानकर चलते हैं कि वह connection मौजूद है और किसी project में जुड़ा हुआ है।
1. Note को connected project में रखें
Note खोलें, उसका right-hand panel खोलें और Config → Settings पर जाएँ। Note का कोई project न हो तो Project field में "Add to project" (project में जोड़ें) दिखता है। वह project चुनें जिसमें Claude connection है।
जो Note सिर्फ़ इसी device पर है, उसकी cloud copy नहीं होती, इसलिए connection उसे नहीं देख सकता। Note का आपके workspace में sync होना ज़रूरी है।
2. Check करें कि Note tools चालू हैं
Key icon → Connected में Claude connection चुनें और Tools देखें। सभी supported tools default रूप से चालू होते हैं। इस walkthrough के लिए ये ticked रहने चाहिए:
read list_note_tabs read_note_tab read_sheet_range list_note_attachments
write edit_note_tab create_note_tab add_note_source
उदाहरण: Claude connection की Tools checklist, default में सब चालू
कुछ समय के लिए chat को read-only रखना हो, तो तीनों write tools को untick करें और Save tools पर click करें। Reading चलती रहती है।
3. अपने edit rights एक बार देख लें
Claude के writes उस व्यक्ति के rights से चलते हैं जिसने connection approve किया था, और हर call पर दोबारा check होते हैं। अगर आप Note को सिर्फ़ देख सकते हैं, तो tool चालू होने पर भी edit_note_tab refuse हो जाता है। पक्का न हो तो Note का Access tab खोलें।
4. Tab के नाम लेकर पूछें
osFoundry connector वाले Claude chat में Note और tabs का नाम लें। Claude नामों को ख़ुद tab IDs में बदल लेता है, लेकिन "Owners sheet" कहना "table" कहने से कम ambiguous है।
osFoundry में "Q3 launch" Note खोलो। Owners sheet में A1:D12 पढ़ो,
Brief tab को ऐसे दोबारा लिखो कि हर open item का उस sheet से एक owner हो,
फिर "Launch status" नाम का Slides tab जोड़ो जिसमें हर owner की एक slide हो।
एक असली run
Note का content और Claude का जवाब example data हैं। Tool names और argument names वही हैं जो live server tools/list में list करता है। Claude Code में यही tools mcp__osfoundry__list_note_tabs जैसे नामों से दिखते हैं।
उदाहरण
Claude → list_note_tabs {"note_id": "…"}
← version "…41.118Z"
tabs: Brief (note), Owners (sheet), Owners archive (sheet)
Claude → read_sheet_range {"note_id": "…", "tab_id": "<Owners>",
"start_row": 0, "start_col": 0,
"row_count": 12, "col_count": 4}
← 12 × 4 values
Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
← text, version "…41.118Z"
Claude → edit_note_tab {"note_id": "…", "tab_id": "<Brief>",
"operation": "replace_text", "text": "…",
"expected_version": "…41.118Z",
"idempotency_key": "brief-owners-1"}
[Claude आपसे इस tool call को allow करने को कहता है → Allow]
← rejected: उस version के बाद Note बदल गया
(इसी बीच Mika ने osFoundry में Brief tab में "press kit" जोड़ा)
Claude → read_note_tab {"note_id": "…", "tab_id": "<Brief>"}
← text में अब "press kit" है, version "…07.502Z"
Claude → edit_note_tab {... "text": "… press kit — owner: Mika …",
"expected_version": "…07.502Z",
"idempotency_key": "brief-owners-2"}
← saved, version "…19.044Z"
Claude → create_note_tab {"note_id": "…", "tab_type": "slides",
"label": "Launch status",
"slides": [{"title": "Aiko"}, {"title": "Mika"}, …],
"expected_version": "…19.044Z",
"idempotency_key": "launch-status-deck"}
← नया tab ID "<Launch status>"
Claude: Brief में अब सभी 9 open items का owner है, "press kit" भी, जिसे
Mika ने मेरे editing के दौरान जोड़ा था। नए Launch status tab में
हर owner की एक slide है।
तीन चीज़ें हुईं जो normal chat में नहीं दिखतीं। Claude ने पूरी workbook के बजाय सिर्फ़ Sheet range पढ़ी। read_sheet_range ज़्यादा से ज़्यादा 100 x 100 cells लौटाता है, इसलिए बड़ी Sheet से भी conversation भर नहीं जाती। पहला edit जान-बूझकर fail हुआ: Claude का version Mika के save से पुराना था। Claude ने अपना पुराना text नए version के साथ दोबारा नहीं भेजा। उसने tab फिर से पढ़ा और ऐसा Brief लिखा जिसमें उसका बदलाव और Mika की line, दोनों हैं। Create call की अपनी key होती है, तो अगर reply खो जाता और Claude दोबारा call करता, osFoundry दूसरा tab बनाने के बजाय वही Launch status tab लौटाता।
Owners archive tab दिखाता है कि tab IDs क्यों ज़रूरी हैं। एक Note में कई Sheet या Slides tabs हो सकते हैं, और सिर्फ़ नाम या type से एक tab तय नहीं होता। हर edit_note_tab call को वह ID चाहिए जो list_note_tabs ने लौटाया।
सीमा कहाँ है
पुराना write refuse होता है, कभी merge नहीं होता। osFoundry server पर Claude के text और व्यक्ति के text को जोड़ने की कोशिश नहीं करता, क्योंकि full-text replace_text के पास यह भरोसे से जानने का कोई तरीका नहीं कि किसी paragraph के दो versions में से आपका मतलब कौन-सा था। Intent agent के पास है, इसलिए agent ही अभी मौजूद content के ऊपर बदलाव दोबारा करता है। Desktop app से व्यक्ति के अपने saves भी इसी तरह सुरक्षित रहते हैं। एक save उस revision को साथ ले जाता है जिससे वह शुरू हुआ था, और अगर नीचे Note बदल गया हो, तो app व्यक्ति के edit को local draft के रूप में रख लेता है और Claude के बदलाव पर save करने के बजाय sync conflict flag करता है।
Version Note का होता है। Tab बनाने से पहले आप इसे list_note_tabs से लेते हैं और किसी tab को edit करने से पहले read_note_tab से। जब व्यक्ति Note का कोई भी tab edit करता है, तो Claude के अगले write को फिर से पढ़ना पड़ता है, चाहे वह किसी दूसरे tab पर हो। यह extra read सस्ता है, और इसका मतलब है कि Claude कभी Note की पुरानी तस्वीर देखकर नहीं लिखता।
Tab बनाना सिर्फ़ जोड़ता है। create_note_tab Slides और Sheet tabs बनाता है और किसी मौजूदा tab का content replace नहीं कर सकता। हर edit operation एक तरह के tab के लिए है: Note और Markdown tabs के लिए replace_text, Slides के लिए slide_add और slides_add_outline, Sheet के exact cells के लिए sheet_set_range, और बाकी supported content tabs के लिए replace_tab_data।
Files सिर्फ़ metadata रहती हैं। list_note_attachments किसी Note की Files और Sources list करता है, लेकिन न file content लौटाता है, न download links। Chat में paste किया गया link कहीं भी forward हो सकता है, और connection revoke करने के बाद भी काम करता रहेगा। Claude add_note_source से citation जोड़ सकता है, जो दूसरे writes की तरह HTTP या HTTPS URL, Note version और एक key लेता है।
Note को move करने से अगली call पर access ख़त्म हो जाता है। उसे ऐसे project में ले जाएँ जो connection में नहीं है, connection से project हटा दें, या Revoke connection पर click करें, तो Claude की अगली read refuse हो जाती है। पहले जारी हुआ token इसे खुला नहीं रखता।
आगे क्या
Claude से कहें कि Owners range को नए Slides tab में पाँच slides की briefing में बदले, और जब वह काम कर रहा हो तब ख़ुद एक slide का title edit करें। Tool calls में आपको rejected write और दोबारा read दिखेगा। Slides tabs Note के बाकी हिस्सों के साथ कैसे रहते हैं, यह Note Slides page पर है।

Top comments (0)