API i MCP
Poveži Sufler sa Claude-om, Cursor-om, n8n-om ili sopstvenim skriptama: čitanje sastanaka, sesija, projekata i kalendara, upravljanje znanjem, kroz REST API, MCP server i CLI.
1. Kako napraviti ključ
API ključ praviš u Podešavanjima, u sekciji API ključevi. Dostupno je na Pro, Unlimited i Ultimate planu; Proba (start) nema API pristup.
- Ključ dobijaš puni tekst samo jednom, u trenutku kreiranja. Posle toga vidiš samo prefiks (npr.
sk_sufler_Ab3xYz), dovoljan da ga prepoznaš u listi. - Pri kreiranju biraš dozvole (scope-ove) koje ključ nosi. Ne postoji naknadna izmena dozvola postojećeg ključa; napravi novi sa drugim scope-ovima i opozovi stari.
- Opoziv ključa važi odmah. Revizija u Podešavanjima beleži REST, CLI i MCP pozive, sa vremenom, operacijom i statusom.
2. Claude Code
Dodaj Sufler kao MCP server jednom komandom:
claude mcp add sufler -- npx -y @ostrichtech/sufler mcpClaude Code te pita za SUFLER_API_KEY pri prvom pokretanju. Zatim u razgovoru: „šta je zaključeno na poslednjem sastanku?" ili „koja pravila projekta X važe za ovaj kod?".
3. Claude Desktop / Cursor
Oba klijenta pokreću MCP server preko stdio (lokalni proces, npx). Dodaj u konfiguraciju (Claude Desktop: claude_desktop_config.json; Cursor: MCP podešavanja projekta ili globalna):
{
"mcpServers": {
"sufler": {
"command": "npx",
"args": ["-y", "sufler", "mcp"],
"env": { "SUFLER_API_KEY": "sk_sufler_..." }
}
}
}4. Remote MCP
Za hostovane klijente sa podrškom za Bearer autorizaciju (npr. n8n) koristi remote MCP umesto stdio procesa:
URL: https://sufler.rs/api/mcp
Header: Authorization: Bearer sk_sufler_...5. REST
Svaka MCP operacija postoji i kao REST poziv:
curl -H "Authorization: Bearer sk_sufler_..." \
"https://sufler.rs/api/v1/meetings?since=7d&limit=10"GET /api/v1/catalog (uz važeći ključ) vraća spisak operacija filtriran po dozvolama tog ključa - samo ono što taj ključ sme da pozove. GET /api/v1/openapi.json zahteva takođe važeći ključ, ali vraća kompletan, nefiltriran opis celog API-ja (OpenAPI 3.1), bez obzira na dozvole ključa kojim si se autentifikovao - koristan za generisanje klijenata ili uvid u sve operacije bez obzira šta trenutni ključ sme.
GET /api/v1/meetings/:id i GET /api/v1/sessions/:id primaju i ?format=md: odgovor tada nije JSON nego text/markdown - isti zapisnik/transkript, spreman za nalepiti u Obsidian ili beleške, bez ručnog formatiranja. Na svim drugim operacijama format se ignoriše (odgovor ostaje JSON).
Greške su RFC 7807 (application/problem+json): telo nosi type, title, status, i po potrebi detail, scope ili resetAt.
6. CLI
Za terminal i skripte bez pisanja HTTP poziva ručno:
npm install -g @ostrichtech/sufler
sufler login
sufler meetings list --since 7dsufler login traži API ključ i čuva ga lokalno (SUFLER_API_KEY iz okruženja uvek ima prednost nad sačuvanim ključem, korisno za CI i jednokratne pozive).
sufler meetings export <id> (i isto za sessions) preuzima sastanak ili sesiju kao Markdown fajl - podrazumevano bez transkripta, uz --transcript i sa njim (zahteva transcripts:read); --format json vraća sirov JSON umesto Markdowna.
7. Dozvole (scope-ovi)
Svaki ključ nosi jednu ili više dozvola:
meetings:read- lista i detalji sastanaka, pretraga po zapisniku.projects:read- lista i detalji projekata, pretraga znanja.projects:write- dodavanje i potvrda znanja, zamena odluka, kreiranje projekata; zahteva iprojects:read.sessions:read- lista i detalji sesija intervju-kopilota.profile:read- profesionalni profil (uloga, industrija, sažetak CV-ja).calendar:read- predstojeći događaji iz povezanog kalendara.transcripts:read- sirov transkript sastanka ili sesije. Posebna dozvola, podrazumevano isključena jer sadržaj transkripta tada napušta aplikaciju. Zahteva imeetings:readilisessions:read(isti obrazac zavisnosti kao kodprojects:write): sama za sebe ne otvara nijedan poziv. Bez nje,include_transcriptu pozivu vraća odgovor satranscriptOmitted: "scope"umesto transkripta - ostatak odgovora (zapisnik, učesnici, teme) i dalje stiže normalno.
Pretraga sastanaka (search_meetings) i čitanje sastanka pokrivaju zapisnik (naslov, sažetak, odluke, moja zaduženja, tuđa zaduženja, rizici, otvorena pitanja), ne sirovi transkript - meetings:read je dovoljan za to, transkript je odvojen.
Upravljanje znanjem ima jedan tok bez izuzetka: add_knowledge uvek upisuje stavku sa statusom draft - ne postoji confirm parametar koji bi je odmah potvrdio pri dodavanju. Potvrda ide isključivo naknadnim pozivom confirm_knowledge. Nacrti (draft) ulaze u sažetak projekta, ali samo potvrđena stavka ulazi doslovno u prompt kopilota.
Spoljni izvor koji se sinhronizuje redovno (Jira, tiketi, skripta pre sastanka) šalje origin_key, npr. jira:PROJ-123: ponovni poziv sa istim ključem menja istu stavku umesto da pravi duplikat. Takav poziv ne dira status (potvrda ostaje), a pin menja samo kad je izričito poslat. Naslov mora biti jedinstven u projektu: sudar sa drugom stavkom vraća 409, pa spoljni izvor u naslov stavlja svoj identifikator (npr. [Jira] PROJ-123 …).
Tekući fokus je odvojen od znanja: jedan živi tekst po projektu (cilj, šta treba da se promeni, kako, šta se očekuje od tebe, otvoreno) koji asistent prepisuje posle sastanaka i iz materijala. add_material ubacuje spec, mejl od menadžera ili opis tiketa u inbox fokusa (ne u znanje, ne doslovno u prompt); refresh_focus ga odmah sažme u nov fokus; set_focus ga prepisuje ručno. get_project vraća focus, pa Claude Code ili Cursor mogu da rade u skladu sa onim što se u sprintu traži, a prompt prepare_for_meeting ga koristi kao okvir.
8. Limiti i kvote
- 60 poziva u minutu po ključu, bez obzira na operaciju.
- Dnevni limit po planu: Pro 500, Unlimited 2000, Ultimate 5000 poziva dnevno.
- Kvotni dan je UTC dan: dnevni limit se resetuje u ponoć po UTC-u (u srpskom lokalnom vremenu to je 01:00 zimi, odnosno 02:00 leti).
- Autentifikacija ide pre rutiranja: i poziv na nepostojeću putanju troši i minutni i dnevni limit po ključu (i probing kapu po IP adresi), ne samo poziv na postojeću operaciju. Isto važi i za pozive na
/catalogi/openapi.json- i oni prolaze kroz punu autentifikaciju, uključujući dnevni brojač, pre nego što se obrade. - Prekoračenje bilo kog limita vraća
429saretry-afteri, za dnevni limit,resetAtu telu greške. - Svaki uspešan odgovor nosi
X-RateLimit-Limit,X-RateLimit-RemainingiX-RateLimit-Reset(Unix vreme sledećeg resetovanja) - stanje dnevne kvote bez posebnog poziva.