Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Struktur Objek MCP Servers

Contoh

# Example MCP Servers Object Structure
mcpServers:
  everything:
    # type: sse # type can optionally be omitted
    url: http://localhost:3001/sse
  googlesheets:
    type: sse
    url: https://mcp.composio.dev/googlesheets/some-endpoint
    requiresOAuth: true
    headers:
      X-User-ID: '{{LIBRECHAT_USER_ID}}'
      X-API-Key: '${SOME_API_KEY}'
    serverInstructions: true # Use server-provided instructions
  puppeteer:
    type: stdio
    command: npx
    args:
      - -y
      - '@modelcontextprotocol/server-puppeteer'
    serverInstructions: 'Do not access any local files or local/internal IP addresses'
  filesystem:
    # type: stdio
    command: npx
    args:
      - -y
      - '@modelcontextprotocol/server-filesystem'
      - /home/user/LibreChat/
    iconPath: /home/user/LibreChat/client/public/assets/logo.svg
    # The “wrench” icon shows up if no icon is provided as it is the default rendering.
  mcp-obsidian:
    command: npx
    args:
      - -y
      - 'mcp-obsidian'
      - /path/to/obsidian/vault
  streamable-http-server:
    type: streamable-http
    url: https://example.com/api/
    proxy: '${MCP_PROXY_URL}'
  per-user-credentials-example:
    type: streamable-http
    url: 'https://example.com/api/'
    headers:
      X-Auth-Token: '{{MY_SERVICE_API_KEY}}'
    customUserVars:
      MY_SERVICE_API_KEY:
        title: 'My Service API Key'
        description: "Enter your personal API key for the service. You can generate one at <a href='https://myservice.example.com/developer/keys' target='_blank'>Service Developer Portal</a>."
        sensitive: true
      MY_SERVICE_PROJECT:
        title: 'Project ID'
        description: 'Enter the project ID used by this service.'
        sensitive: false
  oauth-example:
    type: streamable-http
    url: https://api.example.com/mcp/
    oauth:
      authorization_url: https://example.com/oauth/authorize
      token_url: https://example.com/oauth/token
      client_id: your_client_id
      client_secret: your_client_secret
      redirect_uri: http://localhost:3080/api/mcp/oauth-example/oauth/callback
      scope: 'read execute'
  obo-example:
    type: streamable-http
    url: https://api.example.com/mcp/
    obo:
      scopes: 'api://mcp-server-id/Mcp.Tools.ReadWrite'

<serverName>

Kunci:

KeyTypeDescriptionExample
<serverName>ObjectSetiap kunci di bawah `mcpServers` mewakili konfigurasi server MCP individual, yang diidentifikasi dengan nama unik. Nama ini digunakan untuk merujuk konfigurasi server di dalam aplikasi.

Subkeys

KeyTypeDescriptionExample
titleString(Opsional) Nama tampilan kustom untuk server MCP di UI. Jika tidak ditentukan, nama kunci server yang akan digunakan.title: "My Custom Server"
descriptionString(Opsional) Deskripsi server MCP, ditampilkan di UI untuk membantu pengguna memahami tujuannya.description: "Provides file system access"
typeStringMenentukan tipe koneksi ke server MCP. Opsi yang valid adalah `"stdio"`, `"websocket"`, `"streamable-http"`, atau `"sse"`. Jika dihilangkan, nilai default akan ditentukan berdasarkan keberadaan dan format `url` atau `command`.type: "stdio"
commandString(Untuk tipe `stdio`) Perintah atau executable yang dijalankan untuk memulai server MCP.command: "npx"
argsArray of Strings(Untuk tipe `stdio`) Argumen baris perintah untuk diteruskan ke `command`.args: ["-y", "@modelcontextprotocol/server-puppeteer"]
urlString(Untuk tipe `websocket`, `streamable-http`, atau `sse`) URL untuk terhubung ke server MCP.url: "http://localhost:3001/sse"
proxyString(Opsional, untuk tipe `sse` dan `streamable-http`) URL proksi keluar untuk server MCP jarak jauh ini. Mendukung URL `http://`, `https://`, `socks://`, dan `socks5://`.proxy: "${MCP_PROXY_URL}"
headersObject(Opsional, untuk tipe `sse` dan `streamable-http`) Header kustom untuk dikirim bersama permintaan. Mendukung substitusi kolom pengguna dinamis dengan placeholder `{{LIBRECHAT_USER_*}}` dan variabel lingkungan dengan `${ENV_VAR}`.headers: X-User-ID: "{{LIBRECHAT_USER_ID}}" X-API-Key: "${SOME_API_KEY}"
apiKeyObject(Opsional, untuk tipe `sse` dan `streamable-http`) Konfigurasi autentikasi kunci API untuk server MCP.See apiKey section below
iconPathString(Opsional) Menentukan ikon tampilan alat yang ditampilkan dalam dialog pemilihan alat.iconPath: "/path/to/icon.svg"
chatMenuBoolean(Opsional) Jika diatur ke `false`, akan mengecualikan server MCP dari menu drop-down area obrolan (MCPSelect) untuk akses yang cepat dan mudah. Default-nya adalah `true`.chatMenu: false
serverInstructionsBoolean or String(Opsional) Mengontrol bagaimana instruksi server MCP disuntikkan ke dalam konteks agen. Instruksi server memberikan panduan penggunaan tingkat tinggi untuk keseluruhan server MCP, melengkapi deskripsi alat individu.serverInstructions: true # or serverInstructions: "Custom instructions"
timeoutInteger(Opsional) Batas waktu dalam milidetik untuk permintaan server MCP. Harus berupa bilangan bulat non-negatif.timeout: 30000
initTimeoutInteger(Opsional) Batas waktu dalam milidetik untuk inisialisasi server MCP. Harus berupa bilangan bulat non-negatif.initTimeout: 10000
envObject(Opsional, hanya tipe `stdio`) Variabel lingkungan yang digunakan saat menjalankan proses.env: NODE_ENV: "production"
requiresOAuthBoolean(Opsional, transport jarak jauh: `sse`, `streamable-http`, `websocket`) Apakah server ini memerlukan autentikasi OAuth. Jika tidak ditentukan, akan dideteksi secara otomatis saat server dimulai. Meskipun opsional, sebaiknya tetapkan nilai ini secara eksplisit jika Anda mengetahui apakah server memerlukan OAuth atau tidak. Mengatur `requiresOAuth: false` berguna untuk server yang dilindungi oleh header `Authorization` statis, untuk melewati deteksi otomatis yang mungkin salah mengklasifikasikannya sebagai server yang dilindungi OAuth.requiresOAuth: false
stderrString or Integer(Opsional, hanya tipe `stdio`) Cara menangani `stderr` dari proses anak. Opsi: `"pipe"`, `"ignore"`, `"inherit"`, atau bilangan bulat non-negatif (deskriptor file). Default-nya adalah `"inherit"`.stderr: "inherit"
customUserVarsObject(Opsional) Menentukan variabel kustom yang dapat diatur pengguna untuk server MCP ini, memungkinkan kredensial atau konfigurasi per-pengguna (misalnya, API keys). Variabel ini kemudian dapat direferensikan dalam kolom `headers` atau `env`.customUserVars: API_KEY: title: "API Key" description: "Your personal API key."
oauthObject(Opsional) Konfigurasi OAuth2 untuk autentikasi dengan server MCP. Saat dikonfigurasi, pengguna akan diminta untuk melakukan autentikasi melalui alur OAuth.oauth: authorization_url: "https://example.com/oauth/authorize" token_url: "https://example.com/oauth/token"
oauth_headersObject(Opsional) Peta nama dan nilai header yang hanya digunakan untuk permintaan alur OAuth, seperti pendaftaran klien dinamis atau pertukaran token.oauth_headers: Authorization: "Bearer ${DCR_API_KEY}" X-Custom-Header: "custom_value"
oboObject(Opsional, untuk tipe `sse` dan `streamable-http`) Konfigurasi pertukaran token On-Behalf-Of. Menukarkan token akses OpenID pengguna saat ini dengan token hilir yang didelegasikan dan meneruskannya sebagai token Bearer.obo: scopes: "api://mcp-server-id/Mcp.Tools.ReadWrite"
startupBoolean(Opsional) Jika diatur ke false, server MCP ini tidak akan terhubung saat aplikasi dimulai.startup: false

title

  • Tipe: String (Opsional)
  • Deskripsi: Nama tampilan kustom untuk server MCP di UI. Jika tidak ditentukan, nama kunci server akan digunakan.
  • Contoh:
    my-server:
      title: 'File System Access'
      command: npx
      args: ['-y', '@modelcontextprotocol/server-filesystem']

description

  • Tipe: String (Opsional)
  • Deskripsi: Deskripsi server MCP, ditampilkan di UI untuk membantu pengguna memahami tujuan dan kemampuannya.
  • Contoh:
    my-server:
      title: 'File System Access'
      description: 'Provides read/write access to local files and directories'
      command: npx
      args: ['-y', '@modelcontextprotocol/server-filesystem']

type

  • Tipe: String
  • Deskripsi: Menentukan tipe koneksi ke server MCP. Opsi yang valid adalah "stdio", "websocket", "streamable-http", atau "sse".
  • Nilai Default: Ditentukan berdasarkan keberadaan dan format url atau command.

command

  • Tipe: String
  • Deskripsi: (Untuk tipe stdio) Perintah atau executable yang dijalankan untuk memulai server MCP.

args

  • Tipe: Larik String
  • Deskripsi: (Untuk tipe stdio) Argumen baris perintah untuk diteruskan ke command.

url

  • Tipe: String
  • Deskripsi: (Untuk tipe websocket, streamable-http, atau sse) URL untuk terhubung ke server MCP. Mendukung placeholder kolom pengguna dinamis ({{LIBRECHAT_USER_*}}) dan substitusi variabel lingkungan (${ENV_VAR}).
  • Catatan:
    • Untuk tipe sse, URL harus diawali dengan http:// atau https://.
    • Untuk tipe streamable-http, URL harus dimulai dengan http:// atau https://.
    • Untuk tipe websocket, URL harus diawali dengan ws:// atau wss://.

proxy

  • Tipe: String (Opsional, untuk tipe sse dan streamable-http)
  • Deskripsi: URL proksi keluar untuk server MCP jarak jauh ini. Nilai ini dapat merujuk pada variabel lingkungan dengan ${ENV_VAR}.
  • Protokol yang didukung: http://, https://, socks://, dan socks5://
  • Catatan keamanan: proxy dikontrol oleh admin. Ini menyelesaikan variabel lingkungan, tetapi tidak menyelesaikan placeholder yang dikontrol pengguna seperti {{LIBRECHAT_USER_ID}} atau customUserVars.
  • Contoh:
    mcpServers:
      remote-api:
        type: streamable-http
        url: https://api.example.com/mcp
        proxy: '${MCP_PROXY_URL}'

headers

  • Tipe: Objek (Opsional, untuk tipe sse dan streamable-http)
  • Deskripsi: Header kustom untuk dikirim bersama permintaan. Mendukung berbagai jenis placeholder untuk substitusi nilai dinamis.
  • Dukungan Placeholder:
    • {{LIBRECHAT_USER_ID}}: Akan diganti dengan ID pengguna saat ini, yang memungkinkan dukungan multi-pengguna.
    • {{LIBRECHAT_USER_*}}: Placeholder kolom pengguna dinamis. Ganti * dengan versi HURUF BESAR dari kolom apa pun yang diizinkan.
    • {{LIBRECHAT_OPENID_*}}: Placeholder token/sesi OpenID untuk server yang didefinisikan dalam YAML.
    • {{LIBRECHAT_GRAPH_*}}: Placeholder token Microsoft Graph untuk server yang didefinisikan dalam YAML.
    • {{LIBRECHAT_BODY_*}}: Placeholder isi permintaan untuk server yang didefinisikan dalam YAML, seperti conversationId, parentMessageId, atau messageId saat ini.
    • {{CUSTOM_VARIABLE_NAME}}: Diganti dengan nilai yang diberikan oleh pengguna untuk variabel yang didefinisikan dalam customUserVars (contoh: {{MY_API_KEY}}).
    • ${ENV_VAR}: Akan diganti dengan nilai dari variabel lingkungan {{ENV_VAR}}.

Placeholder Bidang Pengguna yang Tersedia:

PlaceholderUser FieldTypeDeskripsi
{{LIBRECHAT_USER_NAME}}nameStringNama tampilan pengguna
{{LIBRECHAT_USER_USERNAME}}usernameStringNama pengguna
{{LIBRECHAT_USER_EMAIL}}emailStringAlamat email pengguna
{{LIBRECHAT_USER_PROVIDER}}providerStringPenyedia autentikasi (contoh: "email", "google", "github")
{{LIBRECHAT_USER_ROLE}}roleStringPeran pengguna (contoh: "user", "admin")
{{LIBRECHAT_USER_GOOGLEID}}googleIdStringID akun Google
{{LIBRECHAT_USER_FACEBOOKID}}facebookIdStringID akun Facebook
{{LIBRECHAT_USER_OPENIDID}}openidIdStringID akun OpenID
{{LIBRECHAT_USER_SAMLID}}samlIdStringID akun SAML
{{LIBRECHAT_USER_LDAPID}}ldapIdStringID akun LDAP
{{LIBRECHAT_USER_GITHUBID}}githubIdStringID akun GitHub
{{LIBRECHAT_USER_DISCORDID}}discordIdStringID akun Discord
{{LIBRECHAT_USER_APPLEID}}appleIdStringID akun Apple
{{LIBRECHAT_USER_EMAILVERIFIED}}emailVerifiedBoolean → StringStatus verifikasi email ("true" atau "false")
{{LIBRECHAT_USER_TWOFACTORENABLED}}twoFactorEnabledBoolean → StringStatus 2FA ("true" atau "false")
{{LIBRECHAT_USER_TERMSACCEPTED}}termsAcceptedBoolean → StringStatus penerimaan ketentuan ("true" atau "false")

Catatan: Bidang yang kosong akan diganti dengan string kosong.

Placeholder {{LIBRECHAT_BODY_*}} bersifat request-scoped. LibreChat membuat koneksi MCP untuk run yang aktif, menggunakannya kembali di seluruh pemanggilan tool dalam run tersebut, dan membersihkannya saat permintaan berakhir. Server yang bersifat request-scoped dikecualikan dari cache tool persisten sehingga header dan URL spesifik permintaan tidak digunakan kembali di luar run yang aktif. Placeholder {{LIBRECHAT_USER_*}}, {{LIBRECHAT_OPENID_*}}, dan {{LIBRECHAT_GRAPH_*}} tetap membuat server bersifat user-scoped, namun transport HTTP akan menyegarkan header yang telah di-resolve sebelum setiap pemanggilan tool tanpa memaksa penyambungan ulang (reconnect) secara mandiri.

  • Contoh:
    headers:
      X-User-ID: '{{LIBRECHAT_USER_ID}}'
      X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'
      X-User-Role: '{{LIBRECHAT_USER_ROLE}}'
      X-API-Key: '${SOME_API_KEY}'
      Authorization: 'Bearer ${SOME_AUTH_TOKEN}'

apiKey

  • Tipe: Objek (Opsional, untuk tipe sse dan streamable-http)

  • Deskripsi: Konfigurasi autentikasi kunci API untuk server MCP. Menyediakan cara terstruktur untuk mengonfigurasi autentikasi berbasis kunci API.

  • Sub-kunci:

    • source: String - Dari mana kunci API berasal. Opsi:
      • "admin": API key dikonfigurasi oleh administrator (di variabel lingkungan atau config)
      • "user": Kunci API disediakan oleh pengguna melalui UI
    • authorization_type: String - Bagaimana kunci API dikirim dalam permintaan. Opsi:
      • "bearer": Dikirim sebagai Authorization: Bearer <key>
      • "basic": Dikirim sebagai Authorization: Basic <key>
      • "custom": Dikirim dalam header kustom (memerlukan custom_header)
    • custom_header: String - (Diperlukan jika authorization_type adalah "custom") Nama header yang digunakan untuk kunci API
  • Contoh:

    # Admin-provided API key with Bearer auth
    my-server:
      type: streamable-http
      url: https://api.example.com/mcp
      apiKey:
        source: 'admin'
        authorization_type: 'bearer'
    
    # User-provided API key with custom header
    another-server:
      type: sse
      url: https://api.example.com/sse
      apiKey:
        source: 'user'
        authorization_type: 'custom'
        custom_header: 'X-API-Key'

iconPath

  • Tipe: String (Opsional)
  • Deskripsi: Menentukan ikon tampilan alat yang diperlihatkan dalam dialog pemilihan alat.

chatMenu

  • Tipe: Boolean (Opsional)
  • Deskripsi: Jika diatur ke false, akan mengecualikan server MCP dari menu dropdown chatarea (MCPSelect) untuk akses yang cepat dan mudah.
  • Nilai Default: true (Server MCP akan disertakan dalam dropdown chatarea)

serverInstructions

  • Tipe: Boolean atau String (Opsional)

  • Deskripsi: Mengontrol bagaimana instruksi server MCP disuntikkan ke dalam konteks agen. Instruksi server memberikan panduan penggunaan tingkat tinggi untuk keseluruhan server MCP, melengkapi deskripsi alat individu.

  • Opsi:

    • undefined (default): Tidak ada instruksi yang disertakan
    • true: Gunakan instruksi yang disediakan server (jika tersedia) - ideal untuk server yang terdokumentasi dengan baik dengan panduan yang komprehensif
    • false: Menonaktifkan instruksi secara eksplisit - berguna untuk menghemat token konteks atau saat alat (tools) sudah cukup jelas dengan sendirinya
    • string: Gunakan instruksi kustom (menggantikan instruksi yang disediakan server) - terbaik untuk alur kerja khusus aplikasi atau saat instruksi server tidak mencukupi
  • Nilai Default: undefined (tidak ada instruksi yang disertakan)

  • Catatan:

    • Instruksi akan disuntikkan secara otomatis saat serverInstructions dikonfigurasi dan alat (tools) server tersedia untuk agen tersebut
    • Beberapa server masing-masing dapat memberikan instruksi ke konteks agen
  • Contoh:

    # Use server-provided instructions
    serverInstructions: true
    
    # Use custom instructions
    serverInstructions: |
      When using this filesystem server:
      1. Always use absolute paths for file operations
      2. Check file permissions before attempting write operations
    
    # Explicitly disable instructions
    serverInstructions: false

env

  • Tipe: Objek (Opsional, hanya tipe stdio)
  • Deskripsi: Variabel lingkungan yang digunakan saat menjalankan proses.
  • Dukungan Placeholder:
    • {{LIBRECHAT_USER_ID}}: Diganti dengan ID pengguna saat ini.
    • {{LIBRECHAT_USER_*}}: Placeholder bidang pengguna dinamis (contoh: {{LIBRECHAT_USER_EMAIL}}).
    • {{CUSTOM_VARIABLE_NAME}}: Diganti dengan nilai yang diberikan oleh pengguna untuk variabel yang didefinisikan dalam customUserVars (contoh: {{MY_API_KEY}}).
    • ${ENV_VAR}: Diganti dengan nilai dari variabel lingkungan sisi server {{ENV_VAR}}.

timeout

  • Tipe: Integer (Opsional)
  • Deskripsi: Batas waktu dalam milidetik untuk permintaan server MCP. Harus berupa bilangan bulat non-negatif.
  • Nilai Default: 30000 (30 detik)

initTimeout

  • Tipe: Integer (Opsional)
  • Deskripsi: Batas waktu dalam milidetik untuk inisialisasi server MCP. Harus berupa bilangan bulat non-negatif.
  • Nilai Default: 10000 (10 detik)

requiresOAuth

  • Tipe: Boolean (Opsional, hanya untuk transport jarak jauh: sse, streamable-http, websocket)
  • Deskripsi: Apakah server ini memerlukan autentikasi OAuth. Jika tidak ditentukan, akan dideteksi secara otomatis selama startup server. Meskipun opsional, sebaiknya tetapkan nilai ini secara eksplisit jika Anda mengetahui apakah server tersebut memerlukan OAuth atau tidak.
  • Nilai Default: Terdeteksi otomatis jika tidak ditentukan
  • Catatan:
    • Berlaku untuk transport jarak jauh (berbasis URL): sse, streamable-http, dan websocket. Pengaturan ini tidak berpengaruh pada server stdio, yang tidak memiliki URL untuk proses autentikasi.
    • Deteksi otomatis terjadi selama startup server, yang dapat menambah waktu inisialisasi
    • Konfigurasi eksplisit meningkatkan performa startup dengan melewati deteksi
    • Atur requiresOAuth: false untuk server yang hanya dilindungi oleh header Authorization statis (contohnya: kunci API Bearer). Deteksi otomatis akan melakukan probe ke server tanpa header yang Anda konfigurasi, sehingga server yang merespons dengan tantangan 401 dan WWW-Authenticate: Bearer dapat salah diklasifikasikan sebagai server yang dilindungi OAuth; flag ini akan melewati probe tersebut dan membiarkan header statis Anda mengautentikasi koneksi secara normal.
    • Bekerja dengan variabel lingkungan MCP OAuth (MCP_OAUTH_ON_AUTH_ERROR, MCP_OAUTH_DETECTION_TIMEOUT, MCP_OAUTH_HANDLING_TIMEOUT, MCP_OAUTH_FLOW_TTL) untuk manajemen koneksi yang ditingkatkan

stderr

  • Tipe: String atau Integer (Opsional, hanya untuk tipe stdio)
  • Deskripsi: Cara menangani stderr dari proses anak. Ini sesuai dengan semantik child_process.spawn milik Node. Nilai string yang valid: "pipe", "ignore", "inherit". Sebagai alternatif, bilangan bulat non-negatif dapat digunakan sebagai deskriptor file.
  • Nilai Default: "inherit" (pesan ke stderr akan dicetak ke stderr proses induk).

customUserVars

  • Tipe: Objek (Opsional)
  • Deskripsi: Mendefinisikan variabel kustom yang dapat diatur pengguna untuk server MCP ini. Hal ini memungkinkan administrator untuk menentukan variabel (misalnya, kunci API, URL) yang harus dikonfigurasi oleh setiap pengguna secara individu. Nilai yang disediakan pengguna ini kemudian dapat digunakan dalam konfigurasi headers atau env. Server dengan customUserVars secara otomatis dikecualikan dari koneksi tingkat aplikasi, memastikan kredensial per pengguna selalu diselesaikan pada saat runtime.
  • Struktur:
    • Objek customUserVars berisi kunci-kunci, di mana setiap kunci merepresentasikan nama variabel (contohnya, MY_API_KEY). Nama ini akan digunakan dalam placeholder seperti {{MY_API_KEY}}.
    • Setiap nama variabel adalah objek dengan subkunci berikut:
      • title: String (Wajib) - Judul yang mudah dipahami pengguna untuk variabel tersebut, ditampilkan di UI konfigurasi.
      • description: String (Optional) - A description or instructions for the variable, also displayed in the UI to guide the user. HTML can be used in this field (e.g., to create a link: <a href="https://example.com" target="_blank">More info</a>).
      • sensitive: Boolean (Opsional) - Mengontrol apakah nilai tersebut diperlakukan sebagai rahasia dan disamarkan di UI. Secara default akan disamarkan/dianggap rahasia jika diabaikan; atur ke false untuk kolom yang bukan rahasia seperti ID proyek atau URL dasar.
  • Penggunaan dalam headers dan env:
    • Setelah didefinisikan di bawah customUserVars, variabel-variabel ini dapat direferensikan di bagian headers (untuk tipe sse dan streamable-http) atau env (untuk tipe stdio) menggunakan sintaks {{VARIABLE_NAME}}.
    • Pengguna memberikan nilai-nilai ini melalui UI. Pengaturan ini dapat diakses dengan dua cara:
      • Dari Input Obrolan Asisten: Saat memilih alat MCP untuk asisten, ikon pengaturan akan muncul di samping server MCP yang dapat dikonfigurasi di menu tarik-turun pemilihan alat. Mengeklik ikon ini akan membuka dialog untuk mengelola kredensial untuk server tersebut. Konfigurasi Variabel Per-Pengguna MCP - Akses Asisten Konfigurasi Variabel Per-Pengguna MCP - Dialog Akses Asisten
      • Dari Panel Pengaturan: Bagian "MCP Settings" khusus di panel kanan mencantumkan semua server MCP dengan variabel kustom yang dapat ditentukan. Pengguna dapat mengeklik server untuk membuka dialog konfigurasi guna mengatur atau memperbarui kredensial mereka untuk server MCP spesifik tersebut. Konfigurasi Variabel Per-Pengguna MCP - Akses Panel Pengaturan
    • Nilai-nilai yang disediakan pengguna ini disimpan dengan aman, dikaitkan dengan pengguna individu dan server MCP tertentu, serta disubstitusikan pada saat runtime.
  • Contoh:
    customUserVars:
      MY_SERVICE_API_KEY:
        title: 'My Service API Key'
        description: "Your personal API access key for My Service. Find it at <a href='https://myservice.example.com/settings/api' target='_blank'>My Service API Settings</a>."
        sensitive: true
      SOME_OTHER_VAR:
        title: 'Some Other Variable'
        description: 'The specific value for some other configuration (e.g., a specific path or identifier).'
        sensitive: false
    Penggunaan dalam headers:
    headers:
      X-Auth-Token: '{{MY_SERVICE_API_KEY}}'
      X-Some-Other-Config: '{{SOME_OTHER_VAR}}'
    Usage in env (for stdio type):
    env:
      API_KEY: '{{MY_SERVICE_API_KEY}}'

obo

  • Tipe: Objek (Opsional, hanya untuk tipe sse dan streamable-http)
  • Deskripsi: Mengonfigurasi pertukaran token OAuth 2.0 On-Behalf-Of untuk server MCP. LibreChat menukarkan token akses OpenID pengguna yang sedang masuk dengan token hilir (downstream) yang didelegasikan dengan cakupan (scope) yang dikonfigurasi, kemudian meneruskan token tersebut ke server MCP sebagai header Authorization: Bearer ....
  • Subkey yang Diperlukan:
    • scopes: String - Scope tidak kosong yang diminta untuk pertukaran token hilir (downstream).
  • Validasi:
    • obo hanya valid untuk server MCP sse dan streamable-http.
    • obo ditolak untuk server stdio dan websocket.
    • Pengguna memerlukan izin peran MCP_SERVERS.CONFIGURE_OBO untuk mengonfigurasi kolom ini. Lakukan seeding dengan interface.mcpServers.configureObo atau kelola dari panel admin.
  • Prasyarat:
    • Autentikasi OpenID harus dikonfigurasi dengan access token yang dapat digunakan kembali.
    • Penyedia identitas dan aplikasi hilir Anda harus mengizinkan cakupan delegasi yang diminta.
  • Contoh:
    mcpServers:
      enterprise-tools:
        type: streamable-http
        url: https://api.example.com/mcp/
        obo:
          scopes: 'api://mcp-server-id/Mcp.Tools.ReadWrite'

Lihat OpenID Connect Token Reuse dan SharePoint Integration untuk pengaturan terkait penggunaan kembali token (token-reuse) dan token yang didelegasikan.

oauth

  • Tipe: Objek (Opsional)
  • Deskripsi: Konfigurasi OAuth2 untuk autentikasi dengan server MCP. Saat dikonfigurasi, pengguna akan diminta untuk melakukan autentikasi melalui alur OAuth sebelum server MCP dapat digunakan. Jika client id & client secret tidak disediakan, Dynamic Client Registration (DCR) akan digunakan.
  • Subkey yang Diperlukan:
    • authorization_url: String - URL endpoint otorisasi OAuth
    • token_url: String - URL endpoint token OAuth
    • client_id: String - Pengidentifikasi klien OAuth
    • client_secret: String - OAuth client secret
    • redirect_uri: String - OAuth redirect URI (contoh: http://localhost:3080/api/mcp/${serverName}/oauth/callback)
    • scope: String - OAuth scopes (dipisahkan dengan spasi)
  • Subkey Opsional:
    • grant_types_supported: Array of Strings - Tipe grant yang didukung (default ke ["authorization_code", "refresh_token"])
    • token_endpoint_auth_methods_supported: Array of Strings - Metode autentikasi endpoint token yang didukung (default ke ["client_secret_basic", "client_secret_post"])
    • token_exchange_method: String - Metode permintaan pertukaran token. Gunakan default_post untuk penyedia yang mengharapkan kredensial klien OAuth di dalam body POST.
    • response_types_supported: Array of Strings - Tipe respons yang didukung (default ke ["code"])
    • code_challenge_methods_supported: Array of Strings - Metode code challenge PKCE yang didukung (default ke ["S256", "plain"])
    • skip_code_challenge_check: Boolean - Melewati pemeriksaan apakah penyedia OAuth mengiklankan dukungan PKCE. Berguna untuk penyedia seperti AWS Cognito yang mendukung S256 tetapi tidak mengiklankannya dalam metadata mereka. (default ke false)
  • Variabel lingkungan: Bidang URL OAuth yang didefinisikan dalam YAML, termasuk authorization_url, token_url, redirect_uri, dan revocation_endpoint, dapat menggunakan referensi ${ENV_VAR}. LibreChat akan menyelesaikan nilai lingkungan tersebut sebelum validasi URL. URL endpoint OAuth yang dikelola pengguna dan dikirimkan melalui UI harus berupa URL literal dan akan menolak placeholder ${ENV_VAR}.
  • Contoh:
    oauth-api-server:
      authorization_url: https://api.example.com/oauth/authorize
      token_url: https://api.example.com/oauth/token
      client_id: your_client_id
      client_secret: your_client_secret
      redirect_uri: http://localhost:3080/api/mcp/oauth-api-server/oauth/callback
      scope: 'read execute'
      grant_types_supported: ['authorization_code', 'refresh_token']
      token_endpoint_auth_methods_supported: ['client_secret_post']
      token_exchange_method: default_post
      response_types_supported: ['code']
      code_challenge_methods_supported: ['S256', 'plain']

oauth_headers

  • Tipe: Objek (Opsional)
  • Deskripsi: Header yang digunakan secara khusus untuk permintaan alur OAuth. Header ini digunakan selama autentikasi OAuth, seperti pendaftaran klien dinamis dan pertukaran token, dan tidak dikirim selama komunikasi server MCP reguler.
  • Kasus Penggunaan Umum:
    • Menambahkan autentikasi ke endpoint pendaftaran klien dinamis, seperti Authorization: Bearer ${DCR_API_KEY}
    • Menyertakan header khusus penyedia yang diperlukan untuk alur OAuth
    • Mengatur header yang diperlukan oleh endpoint token OAuth
  • Perbedaan Utama dari headers:
    • headers: Dikirim bersama permintaan server MCP reguler setelah autentikasi selesai
    • oauth_headers: Dikirim hanya selama alur autentikasi OAuth
  • Contoh:
    oauth_headers:
      Authorization: "Bearer ${DCR_API_KEY}"
      X-Custom-Header: "custom_value"

startup

  • Tipe: Boolean (Opsional)
  • Deskripsi: Jika diatur ke false, server MCP ini tidak akan terhubung saat aplikasi dimulai. Ini berguna untuk server yang memerlukan input atau konfigurasi pengguna sebelum terhubung, atau untuk kasus di mana Anda ingin mengontrol kapan server diinisialisasi.
  • Nilai Default: true
  • Contoh:
    mcpServers:
      my-mcp-server:
        type: streamable-http
        url: 'https://api.example.com/mcp/'
        startup: false

Catatan

  • Inferensi Tipe:
    • Jika type dihilangkan:
      • Jika url ditentukan dan diawali dengan http:// atau https://, maka type secara default akan menjadi sse.
      • Jika url ditentukan dan diawali dengan ws:// atau wss://, maka type secara default akan menjadi websocket.
      • Jika command ditentukan, type secara default akan menjadi stdio.
  • Tipe Koneksi:
    • stdio: Memulai server MCP sebagai proses anak dan berkomunikasi melalui input/output standar.
    • websocket: Terhubung ke server MCP eksternal melalui WebSocket.
    • sse: Terhubung ke server MCP eksternal melalui Server-Sent Events (SSE).
    • streamable-http: Terhubung ke server MCP eksternal melalui HTTP dengan dukungan untuk respons streaming.
  • Alamat Internal/Lokal:
    • Penting: Server MCP yang menggunakan alamat IP internal (contoh: 172.24.1.165, 192.168.1.100), atau domain lokal (contoh: mcp-server, host.docker.internal) harus diizinkan secara eksplisit. Gunakan mcpSettings.allowedAddresses untuk layanan host:port privat yang spesifik ketika Anda ingin tujuan publik tetap dapat diakses, atau mcpSettings.allowedDomains ketika Anda menginginkan daftar putih (whitelist) yang ketat.
    • Lihat MCP Settings untuk detail konfigurasi.

Contoh

Konfigurasi dengan Alamat Internal

Saat menggunakan server MCP internal/lokal dan tidak diperlukan daftar putih domain yang ketat, konfigurasikan mcpSettings.allowedAddresses dengan host dan port yang tepat:

# MCP Settings - Required for internal/local addresses
mcpSettings:
  allowedAddresses:
    - '172.24.1.165:8000' # Internal IP and port
    - 'mcp-prod:8001' # Docker container and port
    - 'host.docker.internal:8080' # Docker host and port

# MCP Servers - Individual configurations
mcpServers:
  prod-mcp:
    type: streamable-http
    url: http://172.24.1.165:8000/mcp
    timeout: 120000

  test-mcp:
    type: streamable-http
    url: http://mcp-prod:8001/mcp
    timeout: 120000

Server MCP stdio

puppeteer:
  type: stdio
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-puppeteer'
  timeout: 30000
  initTimeout: 10000
  env:
    NODE_ENV: 'production'
    USER_EMAIL: '{{LIBRECHAT_USER_EMAIL}}'
    USER_ROLE: '{{LIBRECHAT_USER_ROLE}}'
  stderr: inherit

Server MCP sse

everything:
  url: http://localhost:3001/sse
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${SOME_API_KEY}'

Server MCP websocket

myWebSocketServer:
  url: ws://localhost:8080

Server MCP streamable-http

streamable-http-server:
  type: streamable-http
  url: https://example.com/api/
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${SOME_API_KEY}'

Server MCP dengan Bidang Pengguna Dinamis

user-aware-server:
  type: sse
  url: https://api.example.com/users/{{LIBRECHAT_USER_USERNAME}}/stream
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-User-Email: '{{LIBRECHAT_USER_EMAIL}}'
    X-User-Role: '{{LIBRECHAT_USER_ROLE}}'
    X-Email-Verified: '{{LIBRECHAT_USER_EMAILVERIFIED}}'
    Authorization: 'Bearer ${API_TOKEN}'

Server MCP dengan Kredensial Per-Pengguna melalui customUserVars

my-mcp-server:
  type: streamable-http
  url: 'https://api.example-service.com/api/' # Example URL
  headers:
    X-Auth-Token: '{{API_KEY}}' # Uses the API_KEY defined below
  customUserVars:
    API_KEY: # This key will be used as {{API_KEY}} in headers/url
      title: 'API Key' # This is the label shown above the input field
      description: "Get your API key <a href='https://example.com/api-keys' target='_blank'>here</a>." # This description appears below the input

CATATAN Lihat MCP Server Initialization untuk informasi lebih lanjut mengenai inisialisasi server berbasis UI.

Server MCP dengan Ikon Kustom

filesystem:
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-filesystem'
    - /home/user/LibreChat/
  iconPath: /home/user/LibreChat/client/public/assets/logo.svg
  chatMenu: false # Exclude from chatarea dropdown

Server MCP dengan Autentikasi OAuth

oauth-api-server:
  type: streamable-http
  url: https://api.example.com/mcp/
  oauth:
    authorization_url: https://api.example.com/oauth/authorize
    token_url: https://api.example.com/oauth/token
    client_id: your_client_id
    client_secret: your_client_secret
    redirect_uri: http://localhost:3080/api/mcp/oauth-api-server/oauth/callback
    scope: 'read execute'
  oauth_headers:
    X-Custom-Header: 'custom_value'

Server MCP dengan Instruksi Server

# Server that uses its own provided instructions
web-search:
  type: streamable-http
  url: https://example.com/mcp/search
  serverInstructions: true

# Server with instructions explicitly disabled
filesystem:
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-filesystem'
    - /home/user/documents/
  serverInstructions: false

# Server with custom instructions
puppeteer:
  type: stdio
  command: npx
  args:
    - -y
    - '@modelcontextprotocol/server-puppeteer'
  serverInstructions: |
    Browser automation security and best practices:
    1. Be cautious with local file access and internal IP addresses
    2. Take screenshots to verify successful page interactions
    3. Wait for page elements to load before interacting with them
    4. Use specific CSS selectors for reliable element targeting
    5. Check console logs for JavaScript errors when troubleshooting

Server MCP dengan OAuth (Legacy requiresOAuth)

composio-googlesheets:
  type: sse
  url: https://mcp.composio.dev/googlesheets/sse-endpoint
  requiresOAuth: true
  headers:
    X-User-ID: '{{LIBRECHAT_USER_ID}}'
    X-API-Key: '${COMPOSIO_API_KEY}'
  timeout: 45000
  initTimeout: 15000

Variabel Lingkungan Terkait (Opsional):

# OAuth configuration for MCP servers
MCP_OAUTH_ON_AUTH_ERROR=true
MCP_OAUTH_DETECTION_TIMEOUT=10000
MCP_OAUTH_HANDLING_TIMEOUT=600000
MCP_OAUTH_FLOW_TTL=900000

# API key for the service
COMPOSIO_API_KEY=your_composio_api_key_here

Mengimpor Konfigurasi Server MCP

Konfigurasi mcpServers memungkinkan LibreChat untuk berinteraksi secara dinamis dengan berbagai server MCP, yang dapat melakukan tugas-tugas khusus atau menyediakan fungsionalitas tertentu di dalam aplikasi. Pendekatan modular ini memfasilitasi perluasan kemampuan aplikasi hanya dengan menambahkan atau memodifikasi konfigurasi server.


Informasi Tambahan

  • Perilaku Default:
    • Inisialisasi terjadi saat startup, dan aplikasi harus dimulai ulang agar perubahan dapat diterapkan.
    • Jika url dan command keduanya ditentukan, type harus didefinisikan secara eksplisit untuk menghindari ambiguitas.
  • Dukungan Multi-Pengguna:
    • MCPManager kini mendukung koneksi tingkat pengguna dan tingkat aplikasi yang terpisah, sehingga memungkinkan pengelolaan koneksi yang tepat per pengguna.
    • Koneksi pengguna dilacak dan dikelola secara terpisah, dengan pembentukan dan pembersihan yang tepat.
    • Gunakan placeholder kolom pengguna dinamis di header, URL, dan variabel lingkungan:
      • {{LIBRECHAT_USER_ID}} - Pengidentifikasi unik pengguna
      • {{LIBRECHAT_USER_EMAIL}} - Alamat email pengguna
      • {{LIBRECHAT_USER_USERNAME}} - Nama pengguna (username) pengguna
      • {{LIBRECHAT_USER_ROLE}} - Peran pengguna (contoh: "user", "admin")
      • Dan masih banyak kolom lainnya (lihat bagian headers untuk daftar lengkapnya)
  • Manajemen Idle Pengguna:
    • Koneksi pengguna dipantau untuk aktivitas dan akan diputuskan setelah 15 menit tidak ada aktivitas.
  • Variabel Lingkungan:
    • Di env (untuk tipe stdio): Berguna untuk menyiapkan lingkungan runtime atau konfigurasi spesifik yang diperlukan oleh proses server MCP.
    • Dalam headers (untuk tipe sse dan streamable-http): Gunakan sintaks ${ENV_VAR} untuk mereferensikan variabel lingkungan dalam nilai header.
  • Bidang Pengguna Dinamis:
    • Placeholder kolom pengguna diganti saat runtime dengan informasi pengguna yang terautentikasi
    • Hanya kolom non-sensitif yang tersedia (kata sandi dan data sensitif lainnya dikecualikan)
    • Bidang yang hilang akan dianggap sebagai string kosong secara default
    • Bidang boolean dikonversi menjadi representasi string ("true" atau "false")
  • Penanganan Kesalahan (stderr):
    • Mengonfigurasi stderr memungkinkan Anda untuk mengelola bagaimana pesan kesalahan dari proses server MCP ditangani. Nilai default "inherit" berarti bahwa kesalahan akan dicetak ke stderr proses induk.
  • Instruksi Server:
    • Instruksi secara otomatis disuntikkan ke dalam pesan sistem agen saat alat server MCP digunakan
    • Instruksi kustom (nilai string) lebih diutamakan daripada instruksi yang disediakan oleh server
    • Beberapa server MCP masing-masing dapat memberikan instruksi mereka sendiri ke dalam konteks agen
    • Instruksi hanya disertakan jika alat server MCP yang terkait benar-benar tersedia untuk agen tersebut
  • Autentikasi OAuth:
    • Alur OAuth2 didukung untuk autentikasi aman dengan server MCP
    • Pengguna akan diminta untuk melakukan autentikasi melalui OAuth sebelum server MCP dapat digunakan

Referensi


Dengan mengonfigurasi mcpServers secara tepat di dalam librechat.yaml Anda, Anda dapat meningkatkan fungsionalitas LibreChat dan mengintegrasikan alat serta layanan kustom dengan lancar.

Bagaimana panduan ini?