사용자 정의 원격 MCP 서버를 구축하고 연결하여 회사 지식으로 ChatGPT를 커스터마이징하세요.
Model Context Protocol(MCP)은 AI 모델을 추가 도구와 지식으로 확장하는 업계 표준이 되고 있는 오픈 프로토콜입니다. 모든 데이터 소스 위에 MCP 서버를 구축할 수 있습니다. 이 가이드는 ChatGPT에서 사용할 기본 원격 MCP 서버를 설정하는 방법을 다룹니다.
작동 원리
"독점 시스템을 포함한 모든 도구를 ChatGPT 심층 연구에 연결하여 직원들이 ChatGPT에서 회사 지식에 액세스할 수 있도록 합니다. 일반적인 프로세스는 다음과 같습니다:"
search
도구와fetch
도구를 노출하여 심층 연구에 최적화된 MCP 서버를 구축합니다.- ChatGPT에서 사용자 정의 심층 연구 커넥터를 생성합니다.
- ChatGPT가 서비스와 효과적으로 상호작용할 수 있도록 커넥터 설정에 자세한 사용 지침을 포함합니다.
- ChatGPT에서 직접 커넥터를 테스트하고 개선합니다.
- 선택적으로 (ChatGPT Enterprise, Edu 또는 Team 관리자의 경우) 전체 워크스페이스에 커넥터를 게시합니다. 여기서 심층 연구에서 추가 지식 소스로 나타납니다.
애플리케이션에서 MCP 원격 서버에 액세스하려고 하시나요?
현재 읽고 있는 가이드는 ChatGPT에 연결할 원격 MCP 서버를 생성하는 것에 관한 것입니다. LLM 애플리케이션에서 도구 네트워크에 API 액세스하려면 모델이 MCP 원격 서버를 사용하도록 활성화하는 방법을 배우세요.
MCP 생태계
우리는 여전히 MCP 생태계의 초기 단계에 있습니다. 오늘날 인기 있는 원격 MCP 서버에는 Cloudflare, HubSpot, Intercom, PayPal, Pipedream, Plaid, Shopify, Stripe, Square, Twilio 및 Zapier가 포함됩니다. 더 많은 서버와 이러한 서버를 쉽게 발견할 수 있게 해주는 레지스트리가 출시될 것으로 예상됩니다. MCP 프로토콜 자체도 초기 단계이며, 프로토콜이 발전함에 따라 MCP 도구에 많은 업데이트를 추가할 것으로 예상됩니다.
사용자 정의 원격 MCP 서버를 사용하기로 결정하기 전에 위험 및 안전 정보를 이해하기를 권장합니다.
MCP 서버 구축
MCP에 아직 익숙하지 않다면 MCP 소개를 읽어보세요. 선호하는 도구와 라이브러리에서 간단한 서버 지침을 찾을 수 있습니다. 다음은 몇 가지 리소스입니다:
기본 원격 서버 설정
시작점으로 GitHub의 심층 연구 MCP 서버 샘플 앱을 사용하세요. 이 최소한의 예제는 컵케이크 주문을 검색하고 가져오는 원격 MCP 서버를 생성하고 실행하는 방법을 보여줍니다.
저장소를 복제하거나 파일을 기존 저장소에 복사합니다.
서버를 설정합니다. Python에서는 다음 명령을 실행할 수 있습니다:
python -m venv env
source env/bin/activate
pip install -r requirements.txt
- 서버를 실행합니다. SSE 전송을 사용하여
http://127.0.0.1:8000
에서 시작됩니다.
python sample_mcp.py
- 필요한 사용자 정의로 샘플 파일을 업데이트합니다:
sample_mcp.py
는 메인 서버 코드입니다records.json
은 컵케이크 주문 데이터입니다 (같은 디렉토리에 있어야 함)
MCP 서버는 여러 도구를 가질 수 있습니다. 현재 ChatGPT에서 MCP 서버에 연결하는 것은 사용자가 심층 연구를 수행할 수 있도록 하는 것으로 제한됩니다. 즉, MCP 원격 서버는 검색과 문서 검색을 위한 도구가 있는 검색 엔진과 유사해야 합니다.
검색 설정
검색 도구를 정의합니다. 간단한 컵케이크 주문 예제에서 코드는 다음과 같습니다:
def create_server():
mcp = FastMCP(name="Cupcake MCP", instructions="Search cupcake orders")
@mcp.tool()
async def search(query: str):
"""
Search for cupcake orders – keyword match.
"""
toks = query.lower().split()
ids = []
for r in RECORDS:
hay = " ".join([
r.get("title", ""),
r.get("text", ""),
" ".join(r.get("metadata", {}).values()),
]).lower()
if any(t in hay for t in toks):
ids.append(r["id"])
return {"ids": ids}
검색 의미론
이 도구를 정의하고 MCP 서버를 통해 노출하는 검색 의미론은 익숙할 수 있는 것과 약간 다릅니다. 다음은 전체 사양입니다:
{
"tools": [
{
"name": "search",
"description": "Searches for resources using the provided query string and returns matching results.",
"input_schema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query."
}
},
"required": ["query"]
},
"output_schema": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the resource."
},
"title": {
"type": "string",
"description": "Title or headline of the resource."
},
"text": {
"type": "string",
"description": "Text snippet or summary from the resource."
},
"url": {
"type": ["string", "null"],
"description": "URL of the resource. Optional but needed for citations to work."
}
},
"required": ["id", "title", "text"]
}
}
},
"required": ["results"]
}
}
]
}
모델이 유효한 쿼리를 형성하는 방법 교육
위 사양에서 description
필드가 중요합니다. 이것은 심층 연구 모델에게 이 도구를 어떻게 사용하여 유효한 검색 쿼리를 구성하는지 설명하는 곳입니다.
예를 들어, 원격 MCP 서버가 다음과 같이 하나의 쿼리 문자열로 표현된 사용자의 복잡한 쿼리 구문을 지원하기를 원할 수 있습니다:
type:deals amount:gt:1000
이런 종류의 쿼리 구문을 활성화하려면 description
필드가 모델에게 이 사용자 입력에서 유효한 쿼리를 형성하는 방법을 가르쳐야 합니다. OpenAI는 이 검색 도구를 호출하기 위해 쿼리 문자열을 형성하도록 심층 연구 모델에게 프롬프트를 주기 위해 설명에 의존합니다.
이를 사용하여 표현력 있는 쿼리를 구축하세요. 실제 예제로, 다음은 HubSpot의 검색 도구 설명입니다.
Purpose:
1. Search for resources in the HubSpot CRM of a specific object type (only contacts, deals, companies, tickets are supported).
2. Note that only a subset of the properties will be returned.
3. For the complete set of properties, use the Fetch tool.
Usage:
1. List a few objects to understand the data model of a specific object type.
2. Search for objects of a specific object type using filters.
3. Make sure to use the offset from the prior search result to call the tool again to paginate through the entire list.
4. Search for associated objects.
Search Tool Response:
1. The Search Tools response contains an id for each attribute. Note that this id is not the same as the hs_object_id of the object.
2. The id can ONLY be used to fetch the object metadata using the Fetch tool. Use the hs_object_id when creating search queries involving specific objects.
문서 검색 설정
문서 검색 도구는 인용을 활성화하는 데 도움이 됩니다. 컵케이크 주문 예제에서 문서 검색을 위한 코드는 다음과 같습니다:
@mcp.tool()
async def fetch(id: str):
"""
Fetch a cupcake order by ID.
"""
if id not in LOOKUP:
raise ValueError("unknown id")
return LOOKUP[id]
return mcp
다음은 전체 사양입니다:
{
"tools": [
{
"name": "fetch",
"description": "Retrieves detailed content for a specific resource identified by the given ID.",
"input_schema": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the resource to fetch."
}
},
"required": ["id"]
},
"output_schema": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the resource."
},
"title": {
"type": "string",
"description": "Title or headline of the fetched resource."
},
"text": {
"type": "string",
"description": "Complete textual content of the resource."
},
"url": {
"type": ["string", "null"],
"description": "URL of the resource. Optional but needed for citations to work."
},
"metadata": {
"type": ["object", "null"],
"additionalProperties": {
"type": "string"
},
"description": "Optional metadata providing additional context."
}
},
"required": ["id", "title", "text"]
}
}
]
}
인증 처리
사용자 정의 원격 MCP 서버를 구축하는 사람으로서 권한 부여와 인증은 데이터를 보호하는 데 도움이 됩니다. OAuth와 동적 클라이언트 등록을 사용하는 것을 권장합니다. 프로토콜의 인증에 대해 자세히 알아보려면 MCP 사용자 가이드를 읽거나 권한 부여 사양을 참조하세요.
ChatGPT에서 사용자 정의 원격 MCP 서버를 연결한 후 워크스페이스의 사용자는 애플리케이션에 대한 OAuth 플로우를 받게 됩니다.
전송 및 터널링
원격 MCP 서버는 인터넷 주소 지정이 가능해야 하므로, 서버가 인트라넷에 호스팅되어 있다면 어떤 형태의 터널링이 필요합니다. ngrok은 이를 위한 편리한 도구 중 하나이지만, Cloudflare 등의 다른 터널링 솔루션도 있습니다.
테스트 및 디버깅
MCP 서버를 테스트하려면 API Playground를 사용하여 서버가 도달 가능하고 도구 목록이 예상대로 해결되는지 확인하세요. Playground를 사용하여 서버가 결과를 반환하는 능력을 점검할 수 있습니다. 이는 더 느린 심층 연구(예: 검색 도구 설명을 개선하는 동안)를 반복적으로 개선하기 전에 할 수 있습니다.
최상의 결과를 위해 Playground에서 OpenAI o3 또는 o3 mini로 테스트하는 것을 권장합니다.
원격 MCP 서버 연결
- ChatGPT 설정에서 원격 MCP 서버를 직접 가져옵니다.
- 커넥터 탭에서 서버를 연결합니다. 이제 작성기 > 심층 연구 도구에서 볼 수 있어야 합니다. 서버를 소스로 추가해야 할 수도 있습니다.
- 몇 가지 프롬프트를 실행하여 서버를 테스트합니다.
위험 및 안전
사용자 정의 MCP 서버를 사용하면 ChatGPT 워크스페이스를 외부 애플리케이션에 연결할 수 있으며, 이를 통해 ChatGPT가 이러한 애플리케이션에서 데이터에 액세스하고, 데이터를 보내고 받고, 작업을 수행할 수 있습니다. 사용자 정의 MCP 서버는 OpenAI에서 개발하거나 확인하지 않았으며, 자체 이용 약관이 적용되는 제3자 서비스임을 유의하세요.
악의적인 MCP 서버를 발견하면 security@openai.com에 신고해 주세요.
신뢰할 수 있는 서버에 연결
ChatGPT 워크스페이스에 추가하는 사용자 정의 MCP 서버에 주의하세요. 현재 ChatGPT에서 사용자 정의 MCP 서버를 사용한 심층 연구만 지원하므로, 원격 MCP 서버 내에서 사용할 수 있는 도구는 검색과 문서 검색뿐입니다. 그러나 이 좁은 범위에서도 위험이 여전히 적용됩니다.
기본 애플리케이션을 알고 신뢰하지 않는 한 사용자 정의 MCP 서버에 연결하지 않는 것을 권장합니다. 예를 들어, 제3자가 호스팅하는 사용자 정의 Stripe MCP 서버 대신 Stripe 자체에서 mcp.stripe.com에 호스팅하는 공식 서버에 연결하는 것을 권장합니다. 오늘날 공식 원격 MCP 서버가 많지 않아서, 해당 서버를 운영하지 않고 단순히 API를 통해 해당 서비스에 요청을 프록시하는 조직에서 호스팅하는 MCP 서버를 사용하고 싶을 수도 있습니다. 이런 경우에는 이러한 비공식 MCP 서버에 대해 특별히 주의 깊게 실사를 하고, 데이터 사용 방법을 신중히 검토하고 서버를 신뢰할 수 있는지 확인한 후에만 연결하세요. 자체 MCP 서버를 구축하고 연결할 때는 올바른 서버인지 재확인하세요.
악의적인 MCP 서버에는 ChatGPT가 예상치 못하게 작동하도록 설계된 숨겨진 지침(프롬프트 주입)이 포함될 수 있습니다. OpenAI는 이러한 위협을 감지하고 차단하는 데 도움이 되는 내장 보안 장치를 구현했지만, 신뢰할 수 있는 서버에만 연결을 설정하도록 신중히 검토하는 것이 필수적입니다.
자체 도구 정의를 정의하는 MCP 서버에 연결할 때, 조직은 해당 MCP 서버의 호스트와 원하지 않거나 의도하지 않은 데이터 공유 요청을 받을 수 있습니다. MCP 서버에 연결하기 전에 공유되는 데이터 유형을 신중하고 철저하게 검토하세요.
MCP 서버는 예기치 않게 도구 동작을 업데이트하여 의도하지 않거나 악의적인 동작을 유발할 수 있습니다.
서버 구축
액세스를 허용하는 데이터에 주의하세요. 원격 MCP 서버는 다른 사람들이 OpenAI를 서비스에 연결할 수 있게 하고, OpenAI가 이러한 서비스에서 데이터에 액세스하고, 데이터를 보내고 받고, 작업을 수행할 수 있게 합니다. 도구의 JSON에 민감한 정보를 넣지 마시고, 원격 MCP 서버에 액세스하는 ChatGPT 사용자로부터 민감한 정보를 저장하지 마세요.
MCP 서버를 구축하는 사람으로서 도구 정의에 악의적인 것을 넣지 마세요. 현재 검색과 문서 검색만 지원합니다.
다른 사람이 사용할 수 있도록 MCP 서버 배포
대기업은 다른 사람들이 ChatGPT의 심층 연구와 함께 회사 지식을 사용할 수 있도록 MCP 서버를 배포하고 싶어할 수 있습니다. MCP 서버를 배포하려면 관리자와 협력하세요.