사용자 정의 도구 그룹 – 며칠이 아닌 몇 분 만에 런치 에이전트 구축
어제 소개한 도구 그룹을 통해 전자상거래나 소셜 미디어 등 특정 영역에 맞춰 MCP 서버를 구성할 수 있습니다. 오늘은 한 단계 더 나아가 ‘사용자 지정 도구 그룹’을 선보입니다.
이제 필요한 도구만 정확히 포함된 MCP 서버 인스턴스를 직접 생성할 수 있습니다. 더도 덜도 없이 딱 필요한 도구만 구성하세요. 정밀한 고객 지원 에이전트가 필요하든, 수술적 정확도를 가진 연구 보조 도구가 필요하든, 새로운 구성 마법사를 사용해 몇 분 만에 커스텀 툴 그룹을 설정할 수 있습니다.
문제점: 일률적인 솔루션은 해결책이 될 수 없습니다
도구 그룹은 소셜이나 브라우저 같은 사전 정의된 클러스터를 선택할 수 있게 하여 컨텍스트 오염 문제를 해결했습니다. 하지만 사용 사례가 특정 범주에 딱 들어맞지 않는다면 어떻게 해야 할까요?
가격 모니터링 에이전트를 구축한다고 가정해 보겠습니다. 필요한 것은 다음과 같습니다:
- 아마존 상품 검색
- eBay 제품 데이터
- 구글 쇼핑 인사이트
하지만 월마트, 타겟, 그리고 ECOMMERCE 그룹에 포함된 다른 15개 전자상거래 데이터 세트는 필요하지 않습니다. 이들을 로드하면 토큰을 낭비하고 모델의 집중력을 분산시킵니다.
또는 B2B 리서치 에이전트를 상상해 보세요. 이 에이전트에는 다음만 필요합니다:
- LinkedIn 개인 프로필
- LinkedIn 기업 데이터
- 검색 엔진(잠재 고객 발굴용)
아마존, 월마트 또는 기타 전자상거래 도구는 필요하지 않습니다. 그저 잡음일 뿐입니다.
해결책: 세분화된 도구 선택
URL 매개변수를 통해 도구별 맞춤 설정을 지원하도록 MCP 서버를 확장했습니다. 이제 에이전트가 필요로 하는 정확한 기능을 직접 선택할 수 있습니다.
작동 방식
내부적으로 인증 계층이 연결 URL에서 tools 매개변수를 추출하여 도구 매니페스트를 동적으로 구성합니다:
function extract_url_params(request){
const url = request.url || '';
const params = {};
// 개별 도구 매개변수 추출
const tools_match = url.match(/tools=([a-zA-Z0-9_,]+)/);
if (tools_match)
{
const tools_str = tools_match[1];
params.tools = tools_str.split(',')
.map(t=>t.trim())
.filter(Boolean);
}
return params;
}
?tools=web_data_amazon_product,search_engine 를 지정하면 서버는 해당 두 도구만 포함하는 허용 도구 세트를 생성합니다:
function build_allowed_tools(groups = [], tools = []){
const allowed = new Set();
for (let groupId of groups)
{
const group = Object.values(GROUPS).find(g=>g.id==groupId);
if (group)
{
for (let tool of group.tools)
allowed.add(tool);
}
}
for (let tool of tools)
allowed.add(tool);
return allowed;
}
마지막으로, 서버에 등록된 모든 도구는 클라이언트의 접근 권한을 확인합니다:
const add_tool = tool=>{
server.addTool({
...tool,
canAccess: auth=>{
// 프로 모드에서는 모든 도구에 접근 권한 부여
if (auth?.proMode===true)
return true;
// 허용된 도구 세트에 포함되는지 확인
if (auth?.allowedTools && auth.allowedTools.size)
return auth.allowedTools.has(tool.name);
// 기본값으로 pro_mode_tools 목록 적용
return pro_mode_tools.includes(tool.name);
},
});
};
결과는? MCP 클라이언트는 명시적으로 허용한 도구만 볼 수 있습니다. 방해 요소도, 낭비되는 토큰도 없습니다.
구성 마법사: 코드 없이 설정하기

실제 사례: 가격 모니터링 에이전트
가격 모니터링 에이전트를 단계별로 구축해 보겠습니다.
1단계: 도구 선택
필요한 것:
web_data_amazon_product– 아마존 최신 가격 조회web_data_ebay_product– eBay 리스팅과 비교web_data_google_shopping– Google 쇼핑 트렌드 확인search_engine– 제품 URL 찾기 (기본 도구 포함)
2단계: 마법사를 통해 구성하기
마법사를 열고 API 토큰을 입력한 후 사용자 정의 도구 매개변수를 사용하세요:
?tools=web_data_amazon_product,web_data_ebay_product,web_data_google_shopping
마법사가 설정을 검증하고 연결 URL을 생성합니다.
3단계: 에이전트 연결
URL을 MCP 클라이언트 구성(예: Claude Desktop의 claude_desktop_config.json)에 붙여넣으세요:
{
"mcpServers": {
"price-monitor": {
"command": "npx",
"args": [
"-y",
"@brightdata/mcp",
],
"env": {
"BRIGHTDATA_API_TOKEN": "YOUR_TOKEN",
"TOOLS":"web_data_amazon_product,web_data_ebay_product,web_data_google_shopping"
}
}
}
}
4단계: 실행
에이전트 컨텍스트에 정확히 4개의 도구가 추가되었습니다:
search_engineweb_data_amazon_productweb_data_ebay_productweb_data_google_shopping
시스템 프롬프트를 막는 60개 이상의 도구 대신 4개만 있습니다. LLM의 주의력은 레이저처럼 집중됩니다.
그룹과 맞춤 도구의 결합
여기 강력한 기능이 있습니다: 도구 그룹과 사용자 지정 도구를 혼합할 수 있습니다.
기본 그룹을 설정한 후 개별 도구를 추가하세요:
&groups=social&tools=web_data_amazon_product
이렇게 하면 다음과 같은 결과를 얻을 수 있습니다:
- 모든 소셜 미디어 도구 (LinkedIn, TikTok, Instagram 등)
- + 아마존 제품 데이터
사용 사례? 인플루언서 마케팅 에이전트로:
- TikTok에서 크리에이터 발굴
- 해당 크리에이터의 제품 언급 분석
- 아마존 제품 리뷰를 교차 참조
정밀하게 설계된 하이브리드 에이전트를 구축하셨군요.
성능 영향: 도구 그룹보다 훨씬 더 간결함
어제, 툴 그룹이 60개 이상의 모든 도구를 로드하는 것에 비해 시스템 프롬프트 토큰을 약 60% 줄인다는 것을 보여주었습니다.
커스텀 툴은 이를 한 단계 더 발전시킵니다:
| 구성 | 로드된 도구 수 | 추정 토큰 감소율 |
| 전체 제품군 | 60개 이상의 도구 | 기준선 (0%) |
도구 그룹 (예: 소셜) |
~25개 도구 | ~60% |
| 사용자 지정 도구 (예: 4개 도구) | 4개 도구 | ~85% |
이것이 중요한 이유는 무엇인가요?
- 낮은 지연 시간 – 초기 핸드셰이크가 더 빠름
- 높은 정확도 – 모델이 관련 없는 도구에서 매개변수를 허위로 생성하지 않음
- 비용 절감 – 요청당 처리해야 할 입력 토큰 수가 줄어듭니다
도구 선택을 넘어선 토큰 최적화
커스텀 도구는 토큰 감소 전략의 일부에 불과합니다. 출력 측면도 최적화했습니다:
ARIA 스냅샷 필터링
스크래핑 브라우저 도구를 사용할 때 에이전트는 DOM 스냅샷을 수신합니다. 그러나 전체 스냅샷은 수천 개의 토큰에 달할 수 있습니다.
우리는 상호작용 가능한 요소 (버튼, 링크, 폼 필드)만 표시하도록 필터링합니다:
export class Aria_snapshot_filter {
static INTERACTIVE_ROLES = new Set([
'button', 'link', 'textbox', 'searchbox', 'combobox', 'checkbox',
'radio', 'switch', 'slider', 'tab', 'menuitem', 'option'
]);
그리고 긴 이름을 잘라내어 요소를 간결하게 포맷팅합니다:
static format_compact(elements){
const lines = [];
for (const el of elements)
{
const parts = [`[${el.ref}]`, el.role];
if (el.name && el.name.length>0)
{
const name = el.name.length>60 ?
el.name.substring(0, 57)+'...' : el.name;
parts.push(`"${name}"`);
}
// 간결한 포맷팅
}
return lines.join('n');
}
결과? 22,000 토큰이었던 브라우저 스냅샷이 3000 토큰으로 축소됩니다. 에이전트는 버튼 클릭과 양식 작성을 위해 필요한 모든 정보를 여전히 확보하지만, 불필요한 부피는 제거됩니다.
도메인 기반 브라우저 세션 캐싱
불필요한 재실행을 방지하기 위해 도메인별로 브라우저 세션을 캐싱합니다:
export class Browser_session {
constructor({cdp_endpoint}){
this.cdp_endpoint = cdp_endpoint;
this._domainSessions = new Map(); // 도메인별 세션 캐싱
this._currentDomain = 'default';
}
async _getDomainSession(domain, {log}={}){
if (!this._domainSessions.has(domain))
{
this._domainSessions.set(domain, {
browser: null,
page: null,
browserClosed: true,
requests: new Map(),
});
}
return this._domainSessions.get(domain);
}
에이전트가 Amazon을 자동화하는 경우, 후속 Amazon 작업을 위해 브라우저가 계속 열려 있습니다. 이는 작업당 실행 시간을 2~3초 단축하고 반복적인 초기화 로그로 인한 토큰 사용량을 줄여줍니다.
사용해 보세요
커스텀 툴즈가 웹 MCP 서버에 출시되었습니다.
마법사 사용
MCP 제어판에 접속하여 구성 마법사를 이용하세요. API 토큰을 입력하고 도구를 선택하면 바로 사용 가능한 연결 URL을 얻을 수 있습니다.
무료 이용권
기본 도구(웹 언락커 및 검색 엔진)에 대해 월 5,000건의 무료 요청을 신청하세요. 맞춤형 에이전트 프로토타이핑에 완벽합니다.
내일 공개: 수개월간 준비해 온 새로운 기능을 선보입니다. 에이전트 워크플로우에 대한 여러분의 생각을 바꿀 것입니다. 기대해 주세요.