Robota 에이전트 SDK에서 Brave WebSearch를 네이티브 프로바이더 검색 및 MCP 서버로 교체
README 링크에서 발견 · today
벤더 웹 검색 도구를 제거하고, 네이티브 프로바이더 검색을 연결하며
What they did
작성자는 SDK의 벤더 기반 웹 검색을 완전히 제거하고 두 가지 채널로 대체했다. 첫째, 모델 네이티브 검색이 프로바이더 구성 옵션이 되었다. 프로바이더 정의가 `IProviderDefinition.nativeWebTools`를 선언하고, Anthropic 프로필이 `options.nativeWebTools.webSearch`를 통해 이를 활성화하며, CLI의 단일 `productProviderDefinitions()`가 프로필이 재정의하지 않는 한 기본적으로 이를 켠다. 세션 수준 전환(`IAIProvider.configureNativeWebTools`)은 삭제되었다. 둘째, MCP 서버다. 최초 대화형 시작 시 CLI가 Exa(https://mcp.exa.ai/mcp) 또는 Parallel(https://mcp.parallel.ai/mcp)을 추가할지 건너뛸지 한 번 묻고, 그 선택은 `settings.json`의 `mcpServers`에 기록되며 `/mcp approve`가 사용하는 동일한 저장소에서 승인된다. 이는 MCP 정의가 해석되기 전에 이루어지므로 해당 세션에서 바로 연결된다. `robota mcp add <exa|parallel|name https-url>`은 나중에 같은 작업을 수행한다. `WebSearch` 도구, `IWebSearchProvider`, Brave 어댑터, `webSearchTool`, `createWebSearchTool`, `createBraveSearchProvider`, 그리고 `retrievalAdapter`/`computerDriver` 옵션은 호환 경로 없이 제거되었다. 그 과정에서 실제 버그가 드러났다. `agent-mcp` 스키마 축소가 범용 부분집합 밖의 키워드(`minLength`, `maxLength`)를 유지해서, 세션 레코드의 엄격한 디코더가 영속화된 도구 스키마를 거부했고, Exa가 연결되면 매 턴이 `Session record cannot be updated: corrupt`로 실패했다. 이제 축소된 노드는 `IParameterSchema` 키워드만 보유하며, 검사할 수 없는 제약은 보고와 함께 조용히 주석으로 남기고 버린다. 외부 선행 요건도 처리되었다. `@robota-sdk/[email protected]`이 `webSearchTool`을 임포트했기 때문에 해당 `web-search` DAG 노드를 제거하고, 0.0.2를 배포한 뒤 여기에 고정했다.
How it went
고정된 커밋에서 build, typecheck, lint, deps:check 및 전체 테스트 스위트가 통과합니다. 실제 키 없는 MCP 실행에서 Exa(`exa__web_search_exa`, `exa__web_fetch_exa`)와 Parallel(`parallel__web_search`, `parallel__web_fetch`, `parallel__web_decisions`)이 승인된 대로 연결되었고, 실제 검색 호출이 결과를 반환했습니다. 소스 CLI PTY 실행(replay provider, 실제 MCP 트래픽, 일회용 HOME)으로 다음이 확인되었습니다: 첫 시작 시 프롬프트가 표시되고 Exa가 추가됨, `/mcp`에서 승인된 것으로 표시됨, 턴이 완료됨, `mcp add parallel`은 TTY 없이는 거부하고 아무것도 쓰지 않음, PTY에서는 성공함, 두 번째 시작에서는 질문을 건너뜀. 종료 코드는 예상대로 0/1입니다.
Worth knowing
Startup은 이 서버들에 대해 정직한 축소 진단을 출력합니다(Exa: `.query.minLength`, `.objective.minLength`, `.objective.maxLength`; Parallel: 두 필드의 `maxLength`와 `web_decisions`의 `$ref`/속성 개수 제약). 범용 서브셋이 문자열 길이나 속성 개수 제약을 로컬에서 강제하지 않기 때문입니다 — 서버는 여전히 이를 강제합니다. 첫 시작 질문은 대화형 TTY 모드에서만 실행되며, print/goal/serve/`mcp serve`/ACP에서는 절대 실행되지 않습니다. PTY 실행은 더미 Anthropic 프로필과 함께 replay provider를 사용했으므로, 실제 모델 호출이 네이티브 검색을 end to end로 실행하지는 않았습니다.
Wiring
(1) WebSearch 도구, `IWebSearchProvider`, Brave 어댑터 및 팩토리 export를 삭제하고, `createDefaultTools`와 세션에서 `retrievalAdapter`/`computerDriver` 옵션을 제거합니다. 프레임워크, ACP 매핑, 앱, 예제, 픽스처를 업데이트합니다. (2) `IProviderDefinition`에 `nativeWebTools`를 추가합니다. Anthropic 프로필은 `options.nativeWebTools.webSearch`를 매핑합니다. CLI `productProviderDefinitions()`는 프로필에서 설정하지 않는 한 이를 선언한 모든 정의에 대해 기본적으로 활성화합니다. (3) `robota mcp add`와 최초 시작 프롬프트를 추가합니다. `mcpServers`를 `settings.json`에 기록하고, `/mcp approve` 스토어를 통해 승인하며, MCP 구성 전에 실행하고, 대화형 TTY 및 대화형 모드에서만 게이트합니다. (4) `agent-mcp`의 narrowing을 수정하여 `IParameterSchema` 키워드만 출력하도록 합니다. (5) `@robota-sdk/workflows`를 0.0.2로 올리고 고정합니다. 구성은 `$HOME/.robota/settings.json`(`mcpServers`)과 `mcp-approvals.json`(`[{serverId, source, status}]`)에 있습니다. `pnpm build && pnpm typecheck && pnpm lint && pnpm deps:check && pnpm test`로 검증한 다음, 일회용 HOME에서 `scripts/dev/agent`를 PTY로 실행하여 확인합니다.Try it yourself
# 요청하신 변경 사항 정리 요청 내용을 그대로 옮기면 다음과 같습니다. ## 1. 벤더 기반 WebSearch 도구 제거 및 두 채널로 대체 ### (1) 모델 네이티브 검색 — 프로바이더 구성 옵션으로 - 프로바이더 정의 타입에 `nativeWebTools` 추가 - 프로필에서 `options.nativeWebTools.webSearch` 활성화 가능 - CLI의 단일 프로덕트 프로바이더 정의 세트에서 프로필이 명시하지 않는 한 기본 활성화 - 세션 레벨 `configureNativeWebTools` 삭제 ### (2) MCP 서버 - 최초 대화형 시작 시 한 번만 질문: Exa(`https://mcp.exa.ai/mcp`), Parallel(`https://mcp.parallel.ai/mcp`), 또는 건너뛰기 - 선택 결과를 `settings.json`의 `mcpServers`에 기록하고, MCP 정의가 해석되기 전에 `/mcp approve`가 사용하는 동일한 저장소에 승인 - `mcp add <exa|parallel|name https-url>` 추가 — TTY 없으면 거부하고 아무것도 쓰지 않음 ## 2. 호환 경로 없이 제거 - WebSearch 도구 - 해당 프로바이더 인터페이스 - Brave 어댑터 - `retrievalAdapter` / `computerDriver` 옵션 ## 3. MCP 스키마 좁히기 수정 - 좁혀진 노드는 보편적 `IParameterSchema` 키워드만 유지 - 검사 불가능한 제약은 리포트와 함께, 어노테이션은 조용히 제거 - 표준 `$schema` 다이얼렉트를 "강제 불가"로 보고하지 않도록 수정 ## 4. 검증 - 각 표면에 대해 실패 우선(failing-first) 테스트 추가 - 실제 키 없는(keyless) MCP 연결로 검증 --- 이 작업은 여러 파일에 걸친 리팩터링이라, 진행하시려면 저장소 구조(프로바이더 정의 타입 위치, CLI 진입점, MCP 정의 해석 경로, `/mcp approve` 저장소 구현, 스키마 좁히기 로직)를 먼저 확인해야 합니다. 해당 파일들을 공유해 주시면 실패 우선 테스트부터 순서대로 작성해 드리겠습니다.