Pengembangan AI berkembang pesat, dan mengintegrasikan alat eksternal dengan model bahasa adalah langkah maju yang penting. OpenRouter menyediakan API terpadu untuk mengakses berbagai model bahasa, sementara MCP Servers (Model Context Protocol Servers) memungkinkan model-model ini untuk menjalankan alat eksternal dan mengakses data langsung. Menggabungkan keduanya menciptakan sistem yang kuat untuk membangun aplikasi AI tingkat lanjut.
Dalam postingan ini, saya akan memandu Anda melalui integrasi MCP Servers dengan OpenRouter. Anda akan mempelajari fungsionalitas inti mereka, proses integrasi, dan contoh praktis.
Memahami MCP Servers dan OpenRouter
Untuk mengintegrasikan MCP Servers dengan OpenRouter, Anda pertama-tama perlu memahami apa yang dilakukan oleh setiap komponen.
OpenRouter: Akses Terpadu ke Model Bahasa
OpenRouter adalah platform yang menyederhanakan interaksi dengan model bahasa besar (LLM) dari penyedia seperti OpenAI, Anthropic, dan xAI. Ia menawarkan satu titik akhir API https://openrouter.ai/api/v1/chat/completions
yang kompatibel dengan struktur API OpenAI. Fitur utama meliputi:
- Agregasi Model: Akses ratusan LLM melalui satu antarmuka.
- Optimasi Biaya: Mengarahkan permintaan ke model hemat biaya berdasarkan ketersediaan dan harga.
- Penyeimbangan Beban: Mendistribusikan permintaan untuk mencegah kelebihan beban pada satu penyedia.
- Fallback: Beralih ke model alternatif jika satu gagal.
Anda akan memerlukan akun OpenRouter dan kunci API untuk melanjutkan. Dapatkan milik Anda di openrouter.ai.

MCP Servers: Memperluas Kemampuan Model
MCP Servers mengimplementasikan Model Context Protocol, memungkinkan LLM untuk memanggil alat eksternal. Tidak seperti model mandiri yang terbatas pada data pelatihan mereka, MCP Servers memungkinkan interaksi waktu nyata dengan sistem seperti direktori file, database, atau API pihak ketiga. Definisi alat MCP yang khas mencakup:
- Nama: Mengidentifikasi alat (mis.,
list_files
). - Deskripsi: Menjelaskan tujuannya.
- Parameter: Menentukan input dalam format JSON Schema.
Misalnya, alat MCP untuk mencantumkan file direktori mungkin terlihat seperti ini:
{
"name": "list_files",
"description": "Lists files in a specified directory",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Directory path"}
},
"required": ["path"]
}
}
Bersama-sama, OpenRouter menyediakan model, dan MCP Servers menyediakan alat, membentuk ekosistem AI yang kuat.
Mengapa Mengintegrasikan MCP Servers dengan OpenRouter?
Menggabungkan teknologi ini menawarkan beberapa keuntungan teknis:
- Fleksibilitas Model: Gunakan LLM yang didukung OpenRouter dengan kemampuan panggilan alat.
- Pengurangan Biaya: Pasangkan model yang lebih murah dengan alat eksternal untuk mengurangi beban tugas kompleks.
- Kemampuan yang Ditingkatkan: Memungkinkan model untuk mengambil data langsung atau melakukan tindakan (mis., operasi file).
- Skalabilitas: Ganti model atau alat tanpa menulis ulang logika inti Anda.
- Tahan Masa Depan: Beradaptasi dengan LLM dan alat baru saat muncul.
Integrasi ini ideal untuk pengembang yang membangun sistem AI yang membutuhkan interaktivitas dunia nyata.
Proses Integrasi Langkah demi Langkah
Sekarang, mari kita bahas teknisnya. Berikut cara mengintegrasikan MCP Servers dengan OpenRouter.
Prasyarat
Pastikan Anda memiliki:
- Akun OpenRouter dan Kunci API: Dari openrouter.ai.
- MCP Server: Berjalan secara lokal (mis., di
http://localhost:8000
) atau jarak jauh. Untuk panduan ini, saya akan menggunakan server MCP sistem file. - Python 3.8+: Dengan pustaka
requests
(pip install requests
). - Apidog: Opsional tetapi direkomendasikan untuk pengujian API. Unduh gratis.
Langkah 1: Definisikan dan Konversi Alat MCP
OpenRouter menggunakan format panggilan alat OpenAI, jadi Anda harus mengonversi definisi alat MCP. Mulailah dengan definisi MCP:
{
"name": "list_files",
"description": "Lists files in a specified directory",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Directory path"}
},
"required": ["path"]
}
}
Konversikan ke format OpenAI dengan menambahkan bidang type
dan menyarangkan detail fungsi:
{
"type": "function",
"function": {
"name": "list_files",
"description": "Lists files in a specified directory",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Directory path"}
},
"required": ["path"]
}
}
}
Struktur JSON ini adalah yang diharapkan OpenRouter dalam muatan API-nya.
Langkah 2: Konfigurasikan Permintaan API
Siapkan permintaan API ke OpenRouter. Tentukan header dengan kunci API Anda dan muatan dengan model, pesan, dan alat. Berikut adalah contoh Python:
import requests
import json
# Headers
headers = {
"Authorization": "Bearer your_openrouter_api_key",
"Content-Type": "application/json"
}
# Payload
payload = {
"model": "openai/gpt-4", # Replace with your preferred model
"messages": [
{"role": "user", "content": "List files in the current directory."}
],
"tools": [
{
"type": "function",
"function": {
"name": "list_files",
"description": "Lists files in a specified directory",
"parameters": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "Directory path"}
},
"required": ["path"]
}
}
}
]
}
Ganti your_openrouter_api_key
dengan kunci Anda yang sebenarnya.
Langkah 3: Kirim Permintaan API Awal
Buat permintaan POST ke titik akhir OpenRouter:
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json=payload
)
response_data = response.json()
Langkah 4: Proses Panggilan Alat
Periksa apakah respons menyertakan panggilan alat:
{
"choices": [
{
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_123",
"type": "function",
"function": {
"name": "list_files",
"arguments": "{\"path\": \".\"}"
}
}
]
}
}
]
}
Ekstrak detail panggilan alat:
message = response_data["choices"][0]["message"]
if "tool_calls" in message:
tool_call = message["tool_calls"][0]
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
Langkah 5: Panggil MCP Server
Kirim permintaan alat ke MCP Server Anda:
mcp_response = requests.post(
"http://localhost:8000/call",
json={
"name": function_name,
"arguments": arguments
}
)
tool_result = mcp_response.json()["result"] # e.g., ["file1.txt", "file2.txt"]
Langkah 6: Kembalikan Hasil Alat ke OpenRouter
Tambahkan panggilan alat asisten dan hasilnya ke riwayat pesan:
messages = payload["messages"] + [
{
"role": "assistant",
"content": null,
"tool_calls": [tool_call]
},
{
"role": "tool",
"tool_call_id": tool_call["id"],
"content": json.dumps(tool_result)
}
]
# Update payload
payload["messages"] = messages
# Send follow-up request
final_response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json=payload
)
final_output = final_response.json()["choices"][0]["message"]["content"]
print(final_output) # e.g., "Files: file1.txt, file2.txt"
Langkah 7: Tangani Beberapa Panggilan Alat
Jika model memerlukan beberapa panggilan alat, ulangi prosesnya:
messages = payload["messages"]
while True:
response = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers=headers,
json={"model": "openai/gpt-4", "messages": messages}
)
message = response.json()["choices"][0]["message"]
if "tool_calls" not in message:
print(message["content"])
break
for tool_call in message["tool_calls"]:
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
mcp_response = requests.post(
"http://localhost:8000/call",
json={"name": function_name, "arguments": arguments}
)
tool_result = mcp_response.json()["result"]
messages.extend([
{"role": "assistant", "content": null, "tool_calls": [tool_call]},
{"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
])
Ini memastikan semua panggilan alat diproses.
Contoh Dunia Nyata: Interaksi Sistem File
Mari terapkan ini ke skenario praktis yang mencantumkan file dengan MCP Server.
- Definisi Alat: Gunakan alat
list_files
dari sebelumnya. - MCP Server: Asumsikan itu berjalan di
http://localhost:8000
. - Panggilan API: Kirim "List files in the current directory" ke OpenRouter.
- Penanganan Respons: Model memanggil
list_files
dengan{"path": "."}
. - Eksekusi MCP: Server mengembalikan
["file1.txt", "file2.txt"]
. - Output Akhir: Model merespons, "Files found: file1.txt, file2.txt."
Berikut adalah kode lengkapnya:
import requests
import json
headers = {"Authorization": "Bearer your_openrouter_api_key", "Content-Type": "application/json"}
payload = {
"model": "openai/gpt-4",
"messages": [{"role": "user", "content": "List files in the current directory."}],
"tools": [{
"type": "function",
"function": {
"name": "list_files",
"description": "Lists files in a specified directory",
"parameters": {
"type": "object",
"properties": {"path": {"type": "string", "description": "Directory path"}},
"required": ["path"]
}
}
}]
}
response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
message = response.json()["choices"][0]["message"]
if "tool_calls" in message:
tool_call = message["tool_calls"][0]
function_name = tool_call["function"]["name"]
arguments = json.loads(tool_call["function"]["arguments"])
mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
tool_result = mcp_response.json()["result"]
messages = payload["messages"] + [
{"role": "assistant", "content": null, "tool_calls": [tool_call]},
{"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
]
final_response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json={"model": "openai/gpt-4", "messages": messages})
print(final_response.json()["choices"][0]["message"]["content"])
Memecahkan Masalah Umum
Berikut adalah solusi untuk masalah yang sering terjadi:
- Alat Tidak Dipanggil: Verifikasi sintaks definisi alat dan kejelasan perintah.
- Argumen Tidak Valid: Pastikan parameter sesuai dengan JSON Schema.
- Kegagalan MCP Server: Periksa log server dan titik akhir (
http://localhost:8000/call
). - Autentikasi API: Konfirmasikan kunci OpenRouter Anda benar.
Gunakan Apidog untuk men-debug permintaan dan respons API secara efisien.
Memperluas Integrasi
Untuk melebihi 2000 kata dan menambahkan kedalaman, pertimbangkan ekstensi ini:
Contoh Kueri Database
Tentukan alat MCP untuk mengkueri database:
{
"type": "function",
"function": {
"name": "query_db",
"description": "Queries a database with SQL",
"parameters": {
"type": "object",
"properties": {"sql": {"type": "string", "description": "SQL query"}},
"required": ["sql"]
}
}
}
Kirim "Get all users from the database" ke OpenRouter, proses panggilan query_db
, dan kembalikan hasil seperti [{"id": 1, "name": "Alice"}]
.
Penanganan Kesalahan
Tambahkan penanganan kesalahan yang kuat:
try:
mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
mcp_response.raise_for_status()
except requests.RequestException as e:
tool_result = f"Error: {str(e)}"
Ini memastikan aplikasi Anda tetap stabil.
Kesimpulan
Mengintegrasikan MCP Servers dengan OpenRouter memungkinkan AI Anda untuk memanfaatkan alat eksternal melalui satu API. Panduan ini mencakup pengaturan, konversi alat, panggilan API, dan contoh praktis seperti interaksi sistem file. Dengan manfaat seperti penghematan biaya dan fungsionalitas yang ditingkatkan, pendekatan ini wajib dicoba bagi pengembang teknis.
Mulai bereksperimen sekarang, dapatkan Apidog secara gratis di sini untuk menguji API Anda. Beri tahu saya bagaimana hasilnya!
