PageSourceSearch

https://iteratio.app/assets/McpPage-TitQpcPq.js

js iteratio.app collected 2026-10-02 01:14:26 UTC 10,780 bytes, 9 lines download raw bytes

1import{h as P,b as _,r as j,j as e,L as C,T as M,w as m,f as L}from"./index-CB3Md__C.js";import{i as w}from"./firebaseUser-B-xqOxJa.js";import{u as k}from"./useAuth-Yl-re7rJ.js";import{C as T}from"./copy-DOc4qhLL.js";import{E as n}from"./external-link-N12WgXSD.js";import"./auth-context-gc1lMV8D.js";const l=L("/mcp"),A=`[mcp_servers.iteratio-cards]
2url = "${l}"`,p=`{
3  "mcpServers": {
4    "iteratio-cards": {
5      "type": "http",
6      "url": "${l}"
7    }
8  }
9}`,O=`claude mcp add --transport http --scope user iteratio-cards ${l}`,R=`openclaw mcp set iteratio-cards '{"url":"${l}","transport":"streamable-http"}'`,E=[["Name","iteratio-cards"],["Type","Streamable HTTP"],["URL",l],["Command to launch","оставьте пустым"],["Arguments","оставьте пустым"],["Environment variables","оставьте пустым"],["Environment variable passthrough","оставьте пустым"],["Working directory","оставьте пустым"]],t=[{id:"codex",title:"Codex",body:"Добавьте remote MCP server в ~/.codex/config.toml или через CLI, затем запустите OAuth login для сервера.",ariaLabel:"Codex MCP config example",code:A},{id:"claude-desktop",title:"Claude Desktop",body:"Добавьте remote HTTP MCP server и пройдите авторизацию через OAuth, когда Claude попросит подключить Iteratio.",ariaLabel:"Claude Desktop MCP config example",code:p},{id:"claude-code",title:"Claude Code",body:"Команда добавляет remote MCP server в пользовательскую конфигурацию Claude Code.",ariaLabel:"Claude Code MCP command example",code:O},{id:"cursor",title:"Cursor",body:"Создайте .cursor/mcp.json в проекте или ~/.cursor/mcp.json для глобального подключения.",ariaLabel:"Cursor MCP config example",code:p},{id:"openclaw",title:"OpenClaw",body:"OpenClaw хранит MCP-серверы в mcp.servers и подключает remote server через streamable-http.",ariaLabel:"OpenClaw MCP command example",code:R},{id:"windsurf",title:"Windsurf и другие клиенты с mcpServers",body:"Используйте тот же JSON-формат, если клиент поддерживает remote HTTP MCP-серверы с OAuth.",ariaLabel:"Generic MCP config example",code:p}],I=async o=>{if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(o);return}const r=document.createElement("textarea");r.value=o,r.setAttribute("readonly",""),r.style.position="fixed",r.style.left="-9999px",document.body.appendChild(r),r.select(),document.execCommand("copy"),document.body.removeChild(r)};function J(){const{loading:o,user:r}=k(),{theme:d,setTheme:f}=P(),h=_(),[b,x]=j.useState(t[0].id),u=j.useRef([]),g=d==="dark"||d==="purple"?m.assets.fullLogoOnDark:m.assets.fullLogoOnLight,a=t.find(s=>
9s.id===b)??t[0],y=w(r),v=async()=>{try{await I(a.code),h.success("Скопировано")}catch(s){h.error(s instanceof Error?s.message:"Не удалось скопировать.")}},N=(s,i)=>{let c=i;if(s.key==="ArrowRight")c=(i+1)%t.length;else if(s.key==="ArrowLeft")c=(i-1+t.length)%t.length;else if(s.key==="Home")c=0;else if(s.key==="End")c=t.length-1;else return;s.preventDefault(),x(t[c].id),u.current[c]?.focus()};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"page-chrome legal-page__chrome",children:[e.jsx(C,{to:"/",className:"page-link-button",children:"Главная"}),e.jsx("div",{className:"page-chrome__theme",children:e.jsx(M,{theme:d,onChange:f})})]}),e.jsx("main",{id:"main-content",className:"mcp-page","data-route-focus-target":!0,children:e.jsxs("article",{className:"mcp-document",children:[e.jsxs("header",{className:"mcp-document__header",children:[e.jsx("img",{src:g,alt:m.name,className:"mcp-document__logo"}),e.jsx("p",{className:"mcp-document__eyebrow",children:"MCP server"}),e.jsx("h1",{children:"Iteratio Cards для агентов"}),e.jsx("p",{className:"mcp-document__intro",children:"Подключение позволяет агенту создавать папки и модули с готовыми карточками в Iteratio. Картинки необязательны: агент может добавить их с лицензией и metadata или оставить карточку без изображения."})]}),e.jsxs("section",{className:"mcp-section","aria-labelledby":"mcp-tools-title",children:[e.jsx("h2",{id:"mcp-tools-title",children:"Что доступно"}),e.jsxs("ul",{children:[e.jsx("li",{children:"OAuth-авторизация через браузер выдаёт агенту scoped MCP access token."}),e.jsxs("li",{children:[e.jsx("code",{children:"profile"})," показывает текущего пользователя и месячную квоту."]}),e.jsxs("li",{children:[e.jsx("code",{children:"create_folder"})," создаёт папку."]}),e.jsxs("li",{children:[e.jsx("code",{children:"create_module"})," создаёт модуль с заполненными карточками и опциональными картинками."]}),e.jsxs("li",{children:[e.jsx("code",{children:"create_exercises"})," добавляет готовые упражнения для созданного модуля."]})]})]}),e.jsxs("section",{className:"mcp-section","aria-labelledby":"mcp-config-title",children:[e.jsx("h2",{id:"mcp-config-title",children:"Подключение в агентах"}),e.jsxs("p",{children:["Remote MCP URL: ",e.jsx("code",{children:l}),". После добавления сервер сам объявляет OAuth metadata, а клиент открывает браузер для авторизации в Iteratio."]}),e.jsxs("div",{className:"mcp-manual-card","aria-labelledby":"mcp-manual-title",children:[e.jsx("h3",{id:"mcp-manual-title",children:"Если заполняете форму вручную"}),e.jsxs("p",{children:["В поле ",e.jsx("code",{children:"Name"})," пишется короткое имя, а не URL. Переключите тип подключения на ",e.jsx("code",{children:"Streamable HTTP"})," и вставьте URL в поле адреса сервера."]}),e.jsx("dl",{className:"mcp-manual-fields",children:E.map(([s,i])=>e.jsxs("div",{className:"mcp-manual-fields__row",children:[e.jsx("dt",{children:s}),e.jsx("dd",{children:e.jsx("code",{children:i})})]},s))}),e.jsx("p",{children:"После сохранения откройте новый чат или обновите MCP server в настройках, затем пройдите авторизацию в браузере."})]}),e.jsxs("div",{className:"mcp-config-tabs",children:[e.jsx("div",{className:"mcp-config-tabs__list",role:"tablist",children:t.map((s,i)=>e.jsx("button",{type:"button",ref:c=>{u.current[i]=c},"aria-controls":`mcp-panel-${s.id}`,"aria-selected":s.id===a.id,className:"mcp-config-tabs__tab",id:`mcp-tab-${s.id}`,onClick:()=>x(s.id),onKeyDown:c=>N(c,i),role:"tab",tabIndex:s.id===a.id?0:-1,children:s.title},s.id))}),e.jsxs("section",{"aria-labelledby":`mcp-tab-${a.id}`,className:"mcp-config-card",id:`mcp-panel-${a.id}`,role:"tabpanel",children:[e.jsx("h3",{children:a.title}),a.body?e.jsx("p",{children:a.body}):null,e.jsxs("div",{className:"mcp-code-wrap",children:[e.jsxs("button",{type:"button",className:"mcp-copy-button",onClick:()=>{v()},children:[e.jsx(T,{size:16,"aria-hidden":"true"}),e.jsx("span",{children:"Копировать"})]}),e.jsx("pre",{className:"mcp-code","aria-label":a.ariaLabel,children:e.jsx("code",{children:a.code})})]})]})]})]}),e.jsxs("section",{className:"mcp-section","aria-labelledby":"mcp-auth-title",children:[e.jsx("h2",{id:"mcp-auth-title",children:"Авторизация"}),e.jsx("p",{children:"Авторизация теперь идёт по OAuth: MCP-клиент открывает страницу Iteratio, вы входите через обычный Firebase login, подтверждаете доступ, и клиент получает отдельный MCP access token."}),!o&&!y?e.jsx("div",{className:"mcp-auth-card__actions",children:e.jsx(C,{to:"/login?next=/mcp",className:"mcp-auth-card__link",children:"Войти в Iteratio"})}):null,e.jsxs("ol",{className:"mcp-auth-steps",children:[e.jsx("li",{children:"Добавьте remote MCP URL в агент."}),e.jsxs("li",{children:["Убедитесь, что сервер ",e.jsx("code",{children:"iteratio-cards"})," появился в списке MCP-серверов."]}),e.jsx("li",{children:"Запустите авторизацию MCP в клиенте, если он не открыл браузер автоматически."}),e.jsxs("li",{children:["Попросите вызвать ",e.jsx("code",{children:"profile"}),". Если агент покажет ваш email и месячную квоту MCP-запросов, авторизация прошла."]})]}
9),e.jsx("p",{children:"Если OAuth-сессия истекла или клиент сбросил токены, повторите подключение через браузер."})]}),e.jsxs("section",{className:"mcp-section","aria-labelledby":"mcp-limits-title",children:[e.jsx("h2",{id:"mcp-limits-title",children:"Ограничения"}),e.jsxs("ul",{children:[e.jsx("li",{children:"Доступно 5 успешных запросов создания модуля в месяц."}),e.jsx("li",{children:"Один модуль может содержать до 200 карточек."}),e.jsxs("li",{children:["Картинки включены в режиме ",e.jsx("code",{children:"auto"}),": если агент не нашёл легальный источник с metadata, модуль всё равно создаётся."]}),e.jsx("li",{children:"Для сохранённой картинки нужны provider, source page, license, license URL и review status."})]})]}),e.jsxs("footer",{className:"mcp-document__footer",children:[e.jsxs("a",{href:"https://developers.openai.com/codex/mcp",target:"_blank",rel:"noopener noreferrer",children:["Документация Codex MCP",e.jsx(n,{size:15,"aria-hidden":"true"})]}),e.jsxs("a",{href:"https://code.claude.com/docs/en/mcp",target:"_blank",rel:"noopener noreferrer",children:["Документация Claude Code MCP",e.jsx(n,{size:15,"aria-hidden":"true"})]}),e.jsxs("a",{href:"https://docs.cursor.com/context/model-context-protocol",target:"_blank",rel:"noopener noreferrer",children:["Документация Cursor MCP",e.jsx(n,{size:15,"aria-hidden":"true"})]}),e.jsxs("a",{href:"/llms.txt",children:["llms.txt",e.jsx(n,{size:15,"aria-hidden":"true"})]})]})]})})]})}export{J as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.