defineToolPlugin는 에이전트가 호출할 수 있는 도구만 추가하는 Plugin을 빌드합니다. 채널, 모델 제공자, 훅, 서비스 또는 설정 백엔드는 추가하지 않습니다. Plugin 런타임 코드를 로드하지 않고도 OpenClaw가 도구를 검색하는 데 필요한 매니페스트 메타데이터를 생성합니다.
제공자, 채널, 훅, 서비스 또는 여러 기능이 혼합된 Plugin의 경우에는 대신 Plugin 빌드, 채널 Plugin 또는 제공자 Plugin부터 시작하십시오.
요구 사항
- Node 22.22.3+, Node 24.15+ 또는 Node 25.9+.
- TypeScript ESM 패키지 출력.
typebox이dependencies에 있어야 합니다(devDependencies에만 있으면 안 됩니다. 생성된 Plugin이 런타임에 이를 가져옵니다).openclaw >=2026.5.17, 즉openclaw/plugin-sdk/tool-plugin를 내보내는 최초 버전.dist/,openclaw.plugin.json및package.json을 배포하는 패키지 루트.
빠른 시작
plugins init는 다음을 스캐폴딩합니다.
npm run plugin:build는 npm run build(tsc)을 실행한 다음 openclaw plugins build --entry ./dist/index.js을 실행합니다. npm run plugin:validate는 다시 빌드한 후 openclaw plugins validate --entry ./dist/index.js를 실행합니다.
검증에 성공하면 다음이 출력됩니다.
openclaw plugins init <id> 옵션:
도구 작성
defineToolPlugin는 Plugin 식별 정보, 선택적 구성 스키마 및 정적 도구 목록을 받습니다. 매개변수 및 구성 유형은 TypeBox 스키마에서 추론됩니다.
선택적 도구 및 팩토리 도구
사용자가 모델에 도구를 전송하기 전에 명시적으로 허용 목록에 추가해야 하는 경우optional: true을 설정하십시오. openclaw plugins build은 일치하는 toolMetadata.<tool>.optional 매니페스트 항목을 작성하므로, OpenClaw는 Plugin 런타임 코드를 로드하지 않고도 해당 도구가 선택 사항임을 확인할 수 있습니다.
factory을 사용하십시오. 특정 실행에서 제외하거나, 샌드박스 상태를 검사하거나, 런타임 도우미를 바인딩할 때 사용할 수 있습니다. 구체적인 도구가 런타임에 빌드되더라도 메타데이터는 정적으로 유지됩니다.
definePluginEntry을 직접 사용하십시오.
반환값
defineToolPlugin는 일반 반환값을 OpenClaw 도구 결과 형식으로 래핑합니다.
- 모델에 정확히 해당 텍스트를 표시해야 하는 경우 문자열을 반환하십시오.
- 모델에 형식이 지정된 JSON을 표시하고 OpenClaw가 원래 값을
details에 유지하도록 하려면 JSON 호환 값을 반환하십시오.
AgentToolResult이 필요하거나 기존 api.registerTool 구현을 재사용하려는 경우 팩토리 도구를 사용하십시오.
구성
configSchema는 선택 사항입니다. 이를 생략하면 OpenClaw가 엄격한 빈 객체 스키마를 적용하며, 생성된 매니페스트에는 여전히 configSchema이 포함됩니다.
configSchema을 사용하면 두 번째 execute 인수의 유형이 여기에서 추론됩니다.
생성된 메타데이터
OpenClaw는 Plugin 런타임 코드를 가져오기 전에 Plugin 매니페스트를 읽어야 합니다.defineToolPlugin은 이를 위한 정적 메타데이터를 노출하고, openclaw plugins build은 이를 패키지에 작성합니다. Plugin ID, 이름, 설명, 구성 스키마, 활성화 또는 도구 이름을 변경한 후에는 생성기를 다시 실행하십시오.
contracts.tools은 중요한 검색 계약입니다. 설치된 모든 Plugin의 런타임을 로드하지 않고도 어떤 Plugin이 각 도구를 소유하는지 OpenClaw에 알려 줍니다. 오래된 매니페스트로 인해 검색에서 도구가 누락되거나 등록 오류가 잘못된 Plugin의 문제로 처리될 수 있습니다.
패키지 메타데이터
openclaw plugins build은 선택한 런타임 진입점에 맞게 package.json도 조정합니다.
./dist/index.js)를 배포하십시오. 소스 진입점은 워크스페이스 로컬 개발에서만 작동합니다.
CI에서 검증
생성된 메타데이터가 오래된 경우plugins build --check는 파일을 다시 작성하지 않고 실패합니다.
plugins validate는 다음을 확인합니다.
openclaw.plugin.json이 존재하고 일반 매니페스트 로더를 통과합니다.- 현재 진입점이
defineToolPlugin메타데이터를 내보냅니다. - 생성된 매니페스트 필드가 진입점 메타데이터와 일치합니다.
contracts.tools이 선언된 도구 이름과 일치합니다.package.json이openclaw.extensions에서 선택한 런타임 진입점을 가리킵니다.
로컬에서 설치 및 검사
별도의 OpenClaw 체크아웃 또는 설치된 CLI에서 패키지 경로를 설치하십시오.게시
패키지가 준비되면 ClawHub를 통해 게시하십시오.clawhub package publish은 로컬 폴더, GitHub 저장소(owner/repo[@ref]) 또는 tarball URL을 소스로 받습니다.
문제 해결
plugin entry not found: ./dist/index.js
선택한 진입점 파일이 존재하지 않습니다. npm run build을 실행한 다음 openclaw plugins build --entry ./dist/index.js 또는 openclaw plugins validate --entry ./dist/index.js을 다시 실행하십시오.
plugin entry does not expose defineToolPlugin metadata
진입점이 defineToolPlugin에서 생성된 값을 내보내지 않았습니다. 모듈의 기본 내보내기가 defineToolPlugin(...) 결과인지 확인하거나 --entry을 사용하여 올바른 진입점을 전달하십시오.
openclaw.plugin.json generated metadata is stale
매니페스트가 더 이상 진입점 메타데이터와 일치하지 않습니다. 다음을 실행하십시오.
openclaw.plugin.json 및 package.json 변경 사항을 모두 커밋하십시오.
package.json openclaw.extensions must include ./dist/index.js
패키지 메타데이터가 다른 런타임 진입점을 가리킵니다. 생성기가 배포하려는 진입점에 맞게 패키지 메타데이터를 조정하도록 openclaw plugins build --entry ./dist/index.js을 실행하십시오.
Cannot find package 'typebox'
빌드된 Plugin은 런타임에 typebox을 가져옵니다. 이를 dependencies에 유지하고 다시 설치 및 빌드한 후 검증을 다시 실행하십시오.
설치 후 도구가 표시되지 않음
다음 항목을 순서대로 확인하십시오.openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.json에는 예상한 도구 이름을 사용하는contracts.tools이 있습니다.package.json에는openclaw.extensions: ["./dist/index.js"]이 있습니다.- Plugin을 설치한 후 Gateway가 다시 시작되었거나 다시 로드되었습니다.