全部产品
Search
文档中心

API Gateway:Referensi bidang konfigurasi HTTP ke MCP

更新时间:Dec 13, 2025

Dokumen ini menjelaskan bidang dan referensi untuk konfigurasi HTTP ke MCP. Anda dapat menggunakan panduan ini untuk mengintegrasikan tool dengan layanan MCP menggunakan YAML kustom.

Bidang konfigurasi

Konfigurasi server

Nama

Tipe data

Diperlukan

Deskripsi

server.name

string

Wajib

Nama server MCP. Jika Anda menggunakan plugin server MCP bawaan, seperti quark-search, atur bidang ini ke nama server tersebut. Anda tidak perlu mengonfigurasi bidang tools. Dalam skenario HTTP ke MCP, Anda dapat mengatur bidang ini ke nilai apa pun.

server.config

objek

Opsional

Konfigurasi server, seperti kunci API.

server.securitySchemes

array[objek]

Opsi

Menentukan skema autentikasi yang dapat digunakan kembali oleh alat sebagai referensi. Untuk informasi selengkapnya, lihat Autentikasi dan keamanan.

Konfigurasi alat yang diizinkan

Nama

Tipe data

Diperlukan

Deskripsi

allowTools

array[string]

Opsional

Daftar tool yang diizinkan untuk dipanggil. Jika tidak ditentukan, semua tool diizinkan.

Konfigurasi alat HTTP ke MCP

Name

Data type

Required

Description

tools

array[object]

Optional

Daftar konfigurasi tool HTTP ke MCP.

tools[].name

string

Required

Nama tool.

tools[].description

string

Required

Deskripsi fungsi tool tersebut.

tools[].args

array[object]

Required

Definisi parameter tool.

tools[].args[].name

string

Required

Nama parameter.

tools[].args[].description

string

Required

Deskripsi parameter.

tools[].args[].type

string

Optional

Tipe parameter, seperti string, number, integer, boolean, array, atau object. Nilai default-nya adalah `string`.

tools[].args[].required

boolean

Optional

Menentukan apakah parameter tersebut wajib diisi. Nilai default-nya adalah `false`.

tools[].args[].default

any

(Optional)

Nilai default parameter.

tools[].args[].enum

array

Optional

Daftar nilai yang diizinkan untuk parameter tersebut.

tools[].args[].items

object

Optional

Skema untuk item array ketika `type` bernilai `array`.

tools[].args[].properties

object

Optional

Skema untuk properti object ketika `type` bernilai `object`.

tools[].args[].position

string

Optional

Posisi parameter dalam permintaan, seperti query, path, header, cookie, atau body.

tools[].requestTemplate

object

Required

Templat permintaan HTTP.

tools[].requestTemplate.url

string

Required

Templat URL permintaan.

tools[].requestTemplate.method

string

Required

Metode HTTP, seperti GET atau POST.

tools[].requestTemplate.headers

array[object]

Optional

Templat header permintaan.

tools[].requestTemplate.headers[].key

string

Required

Nama header permintaan.

tools[].requestTemplate.headers[].value

string

Required

Templat nilai header permintaan.

tools[].requestTemplate.body

string

Optional

Templat badan permintaan. Ini saling eksklusif dengan argsToJsonBody, argsToUrlParam, dan argsToFormBody.

tools[].requestTemplate.argsToJsonBody

boolean

Optional

Nilai default-nya adalah `false`. Jika `true`, parameter digunakan langsung sebagai badan permintaan JSON. Ini saling eksklusif dengan body, argsToUrlParam, dan argsToFormBody.

tools[].requestTemplate.argsToUrlParam

boolean

Optional

Nilai default-nya adalah `false`. Jika `true`, parameter ditambahkan ke URL sebagai parameter kueri. Ini saling eksklusif dengan body, argsToJsonBody, dan argsToFormBody.

tools[].requestTemplate.argsToFormBody

boolean

Optional

Nilai default-nya adalah `false`. Jika `true`, parameter dikodekan dalam badan permintaan dengan format application/x-www-form-urlencoded. Ini saling eksklusif dengan body, argsToJsonBody, dan argsToUrlParam.

tools[].responseTemplate

object

Required

Templat transformasi respons HTTP.

tools[].responseTemplate.body

string

Optional

Templat transformasi badan respons. Ini saling eksklusif dengan prependBody dan appendBody.

tools[].responseTemplate.prependBody

string

Optional

Teks yang disisipkan sebelum badan respons. Ini saling eksklusif dengan body.

tools[].responseTemplate.appendBody

string

Optional

Teks yang disisipkan setelah badan respons. Ini saling eksklusif dengan body.

tools[].security

object

Optional

Konfigurasi keamanan tingkat tool. Ini mendefinisikan metode autentikasi antara MCP Client dan MCP Server serta mendukung passthrough kredensial.

tools[].security.id

string

Required when tools[].security is configured

Mereferensikan ID skema autentikasi yang didefinisikan dalam server.securitySchemes.

tools[].security.passthrough

boolean

Optional

Menentukan apakah autentikasi passthrough diaktifkan. Nilai default-nya adalah `false`. Jika true, kredensial yang diekstraksi dari permintaan MCP Client digunakan untuk skema autentikasi yang didefinisikan dalam requestTemplate.security.

tools[].requestTemplate.security

object

Optional

Konfigurasi keamanan untuk templat permintaan HTTP. Ini mendefinisikan metode autentikasi antara MCP Server dan API HTTP.

tools[].requestTemplate.security.id

string

Required when tools[].requestTemplate.security is configured

Mereferensikan ID skema autentikasi yang didefinisikan dalam server.securitySchemes.

tools[].requestTemplate.security.credential

string

Optional

Menimpa kredensial default yang didefinisikan dalam server.securitySchemes. Jika tools[].security.passthrough juga diaktifkan, bidang ini diabaikan, dan kredensial passthrough yang diprioritaskan.

Autentikasi dan keamanan

Plugin MCP Server mendukung konfigurasi autentikasi fleksibel untuk memastikan komunikasi yang aman.

Mendefinisikan skema autentikasi (server.securitySchemes)

Anda dapat mendefinisikan serangkaian skema autentikasi yang dapat digunakan kembali di tingkat server. Tool dapat mereferensikan skema ini untuk mengonfigurasi cara MCP Server melakukan autentikasi dengan HTTP API backend.

Bidang konfigurasi (server.securitySchemes[]):

Nama

Tipe data

Diperlukan

Deskripsi

id

string

Wajib

Identifier unik untuk skema autentikasi, yang direferensikan oleh konfigurasi tool.

type

string

Wajib

Tipe autentikasi. Tipe yang didukung adalah http (untuk autentikasi Basic dan Bearer) dan apiKey.

scheme

string

Opsional

Ketika type bernilai http, menentukan skema, seperti basic atau bearer.

in

string

Opsi

Ketika type bernilai apiKey, menentukan lokasi API key, seperti header atau query.

name

string

Opsional

Ketika type bernilai apiKey, menentukan nama header atau nama parameter query.

defaultCredential

string

Opsional

Kredensial default untuk skema ini. Misalnya, untuk Basic Auth, nilainya bisa berupa user:password. Untuk Bearer Token, nilainya adalah token itu sendiri. Untuk API key, nilainya adalah key itu sendiri.

Contoh (server.securitySchemes):

server:
  name: my-api-server
  securitySchemes:
    - id: MyBasicAuth
      type: http
      scheme: basic
      defaultCredential: "admin:secretpassword" # Default username and password
    - id: MyBearerToken
      type: http
      scheme: bearer
      defaultCredential: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." # Default Bearer Token
    - id: MyApiKeyInHeader
      type: apiKey
      in: header
      name: X-Custom-API-Key # API key is in a header named X-Custom-API-Key
      defaultCredential: "abcdef123456" # Default API key
    - id: MyApiKeyInQuery
      type: apiKey
      in: query
      name: "api_token" # API key is in a query parameter named api_token
      defaultCredential: "uvwxyz789012"

Menerapkan skema autentikasi dalam tool

Setelah Anda mendefinisikan server.securitySchemes, Anda dapat mereferensikan skema ini di bidang requestTemplate.security setiap tool menggunakan id. Hal ini menentukan metode autentikasi yang digunakan MCP Server saat memanggil HTTP API backend.

  • tools[].requestTemplate.security.id: Merujuk pada id skema autentikasi yang didefinisikan dalam server.securitySchemes.

  • tools[].requestTemplate.security.credential: Opsional. Jika disediakan, bidang ini menimpa defaultCredential dalam skema yang direferensikan. Hal ini memungkinkan Anda menggunakan kredensial berbeda untuk tool tertentu meskipun menggunakan mekanisme autentikasi yang sama.

Contoh:

tools:
  - name: get-user-details
    # ... konfigurasi alat lainnya ...
    requestTemplate:
      url: "https://api.example.com/users/{{.args.userId}}"
      method: GET
      security:
        id: MyBearerToken # Menggunakan skema MyBearerToken yang didefinisikan di atas
        # credential: "override_token_for_this_tool" # Opsional: Mengganti token default untuk alat ini
  # ...
  - name: update-inventory
    # ... konfigurasi alat lainnya ...
    requestTemplate:
      url: "https://api.example.com/inventory/{{.args.itemId}}"
      method: POST
      security:
        id: MyApiKeyInHeader # Menggunakan skema MyApiKeyInHeader
        # Alat ini akan menggunakan defaultCredential yang didefinisikan dalam MyApiKeyInHeader

Autentikasi passthrough

Fitur autentikasi passthrough memungkinkan kredensial yang diberikan saat client MCP, seperti asisten AI, memanggil MCP Server untuk diteruskan langsung ke MCP Server. Kredensial ini kemudian digunakan untuk mengautentikasi panggilan berikutnya ke HTTP API backend.

Metode konfigurasi:

  1. Pastikan bahwa skema autentikasi yang relevan telah didefinisikan di server.securitySchemes. Ini mencakup skema yang digunakan client untuk terhubung ke MCP Server dan skema yang digunakan MCP Server untuk terhubung ke HTTP API backend.

  2. Konfigurasikan autentikasi tingkat tool (tools[].security): Untuk tool yang memerlukan passthrough kredensial, konfigurasikan bidang security:

    • id: Merujuk pada skema autentikasi yang didefinisikan di server.securitySchemes yang digunakan untuk autentikasi antara MCP Client dan MCP Server. Plugin mengekstraksi kredensial dari permintaan client berdasarkan skema ini dan menghapus kredensial tersebut dari permintaan asli.

    • passthrough: true: Mengaktifkan autentikasi passthrough.

  3. Konfigurasikan autentikasi templat permintaan (tools[].requestTemplate.security): Konfigurasikan bidang security di requestTemplate tool:

    • id: Merujuk pada skema autentikasi yang didefinisikan di server.securitySchemes yang digunakan untuk autentikasi antara MCP Server dan HTTP API backend.

    • Ketika tools[].security.passthrough diatur ke true, kredensial yang diekstraksi dari client diterapkan pada panggilan ke HTTP API backend sesuai dengan skema requestTemplate.security ini.

Contoh:

Asumsikan client MCP menggunakan Bearer Token untuk memanggil MCP Server, dan MCP Server perlu menggunakan API key untuk memanggil HTTP API backend.

server:
  name: product-api-server
  securitySchemes:
    - id: ClientSideBearer # Client uses a Bearer Token
      type: http
      scheme: bearer
    - id: BackendApiKey    # Backend API uses X-API-Key
      type: apiKey
      in: header
      name: X-API-Key
      # defaultCredential: "optional_default_backend_key"

tools:
  - name: get-product-securely
    description: "Get product information (secure passthrough)"
    security: # Client -> MCP Server authentication configuration
      id: ClientSideBearer # The MCP Server expects the client to use this scheme and will try to extract this type of credential
      passthrough: true   # Allow credential passthrough
    args:
      - name: product_id
        description: "Product ID"
        type: string
        required: true
    requestTemplate:
      security: # MCP Server -> backend HTTP API authentication configuration
        id: BackendApiKey # The backend API requires this scheme. The passthrough credential will be applied according to this scheme.
      url: "https://api.example.com/products/{{.args.product_id}}"
      method: GET

Alur kerja

  1. Client MCP mengirim permintaan ke tool get-product-securely di MCP Server. Permintaan membawa Bearer <client_token> di header Authorization.

  2. MCP Server mengidentifikasi bahwa client menggunakan Bearer Token berdasarkan tools[].security (id: ClientSideBearer). Server mengekstraksi <client_token> dari permintaan dan menghapus header Authorization asli.

  3. Karena passthrough: true diatur, <client_token> yang diekstraksi ditandai sebagai kredensial passthrough.

  4. MCP Server bersiap memanggil HTTP API backend. Server memeriksa requestTemplate.security (id: BackendApiKey).

  5. Karena passthrough diaktifkan, MCP Server menggunakan <client_token> yang diekstraksi sebelumnya sebagai nilai kredensial. Nilai ini ditambahkan ke permintaan ke https://api.example.com/products/... sebagai header HTTP bernama X-API-Key, sesuai dengan skema BackendApiKey.

  6. HTTP API backend menerima permintaan dengan header X-API-Key yang diatur ke <client_token>.

Penting
  • Ketika tools[].security.passthrough diatur ke true, bidang requestTemplate.security.credential diabaikan. Kredensial passthrough yang berlaku.

  • Nilai kredensial passthrough digunakan langsung untuk skema autentikasi yang ditentukan oleh requestTemplate.security. Pastikan format kredensial kompatibel dengan skema autentikasi target. Fungsi extractAndRemoveIncomingCredential berusaha mengekstraksi bagian inti kredensial, seperti nilai token Bearer atau bagian yang dikodekan Base64 dari autentikasi Basic.

Tipe parameter yang didukung

Tool HTTP ke MCP mendukung berbagai tipe parameter, yang memungkinkan Anda mendefinisikan parameter tool secara lebih tepat:

  • string: Tipe string. Ini adalah nilai default.

  • number: Tipe angka (bilangan titik mengambang).

  • integer: Tipe bilangan bulat.

  • boolean: Tipe Boolean (true/false).

  • array: Tipe array. Anda dapat menggunakan bidang items untuk mendefinisikan skema elemen array.

  • object: Tipe objek. Anda dapat menggunakan bidang properties untuk mendefinisikan skema properti objek.

Contoh:

args:
  - name: query
    description: "Search keyword"
    type: string
    required: true
  - name: limit
    description: "Number of results to return"
    type: integer
    default: 10
  - name: filters
    description: "Filter conditions"
    type: object
    properties:
      category:
        type: string
        enum: ["food", "hotel", "attraction"]
      price:
        type: integer
        minimum: 0
  - name: coordinates
    description: "List of coordinates"
    type: array
    items:
      type: object
      properties:
        lat:
          type: number
        lng:
          type: number

Kontrol posisi parameter

Tool HTTP ke MCP mendukung bidang position, yang memungkinkan Anda mengontrol secara tepat lokasi setiap parameter dalam permintaan. Hal ini memberikan fleksibilitas lebih besar dalam membangun permintaan API, seperti menggunakan parameter path, parameter query, dan parameter body dalam satu permintaan yang sama.

Jenis posisi yang didukung

  • query: Parameter dilewatkan sebagai parameter query di URL.

  • path: Parameter menggantikan placeholder path di URL, seperti {petId} dalam /pet/{petId}.

  • header: Parameter dilewatkan dalam header HTTP.

  • cookie: Parameter dilewatkan sebagai cookie.

  • body: Parameter dilewatkan dalam body permintaan. Secara otomatis diformat sebagai JSON atau form berdasarkan tipe konten.

Contoh

args:
  - name: petId
    description: "ID Hewan Peliharaan"
    type: string
    required: true
    position: path
  - name: token
    description: "Token autentikasi"
    type: string
    required: true
    position: header
  - name: sessionId
    description: "ID Sesi"
    type: string
    position: cookie
  - name: limit
    description: "Jumlah hasil yang dikembalikan"
    type: integer
    default: 10
    position: query
  - name: tags
    description: "Daftar tag"
    type: array
    position: body

Dalam contoh di atas:

  • petId menggantikan placeholder {petId} di URL.

  • token ditambahkan ke permintaan sebagai header HTTP.

  • sessionId ditambahkan ke permintaan sebagai cookie.

  • limit ditambahkan ke URL sebagai parameter kueri.

  • tags ditambahkan ke badan permintaan.

Hubungan dengan opsi penanganan parameter batch

Ketika Anda menggunakan position untuk menentukan lokasi parameter, parameter tersebut diproses sesuai. Parameter ini tidak terpengaruh oleh opsi penanganan parameter batch, seperti argsToJsonBody, argsToUrlParam, dan argsToFormBody. Opsi batch ini hanya memengaruhi parameter yang tidak memiliki position yang ditentukan.

Sebagai contoh, jika Anda menggunakan position dan argsToJsonBody secara bersamaan:

  • Parameter dengan position: query ditambahkan ke string query URL.

  • Parameter dengan position: header ditambahkan ke header HTTP.

  • Parameter dengan position: path menggantikan placeholder di URL.

  • Parameter dengan position: cookie ditambahkan sebagai cookie.

  • Parameter dengan position: body ditambahkan ke body permintaan JSON.

  • Parameter tanpa position yang ditentukan ditambahkan ke badan permintaan JSON oleh argsToJsonBody.

Selain itu, jika Anda secara eksplisit menentukan body di requestTemplate, semua parameter dengan position: body diabaikan untuk menghindari konflik.

Metode pengiriman parameter permintaan

Selain menggunakan position untuk mengontrol secara tepat lokasi setiap parameter, tool HTTP ke MCP juga mendukung empat metode penanganan parameter batch. Opsi ini saling eksklusif. Anda hanya dapat memilih salah satu.

  1. body: Anda dapat membangun body permintaan secara manual menggunakan templat. Ini adalah metode paling fleksibel dan memberikan kontrol penuh atas format body permintaan.

    requestTemplate:
      body: |
        {
          "query": "{{.args.query}}",
          "filters": {{toJson .args.filters}},
          "options": {
            "limit": {{.args.limit}}
          }
        }
    
  2. argsToJsonBody: Jika diatur ke true, parameter yang tidak memiliki position yang ditentukan dikirim sebagai objek JSON dalam body permintaan. Header Content-Type: application/json; charset=utf-8 ditambahkan secara otomatis.

    requestTemplate:
      argsToJsonBody: true
    
  3. argsToUrlParam: Menambahkan parameter tanpa position yang ditentukan ke URL sebagai parameter query ketika diatur ke true.

    requestTemplate:
      argsToUrlParam: true
    
  4. argsToFormBody: Ketika diatur ke true, parameter yang tidak memiliki position yang ditentukan dikodekan dalam body permintaan dalam format application/x-www-form-urlencoded. Header Content-Type yang sesuai ditambahkan secara otomatis.

    requestTemplate:
      argsToFormBody: true
    

Opsi ini menyederhanakan konfigurasi pola pemanggilan API umum tanpa perlu membangun body permintaan atau parameter URL secara manual. Perhatikan bahwa keempat opsi ini saling eksklusif. Anda hanya dapat menggunakan salah satu dalam satu konfigurasi tool. Jika Anda mengonfigurasi beberapa opsi sekaligus, sistem akan melaporkan error dan menolak memuat konfigurasi tool tersebut.

Sintaksis templat

Fitur HTTP-ke-MCP menggunakan library GJSON Template untuk rendering templat. Library ini menggabungkan sintaksis templat Go dengan sintaksis path GJSON yang kuat.

Templat permintaan

Anda dapat menggunakan templat permintaan untuk membuat URL, header, dan body permintaan HTTP:

  • Untuk mengakses nilai konfigurasi, gunakan .config.fieldName.

  • Untuk mengakses parameter tool, gunakan .args.parameterName.

Templat respons

Anda dapat menggunakan templat respons untuk mengubah respons HTTP menjadi format yang sesuai untuk konsumsi AI:

  • Untuk mengakses bidang respons JSON, gunakan sintaksis path GJSON.

  • Anda dapat menggunakan fungsi templat seperti add, upper, dan lower.

  • Anda dapat menggunakan struktur kendali seperti if dan range.

GJSON Template mencakup semua fungsi dari Sprig. Library ini menyediakan lebih dari 70 fungsi templat untuk manipulasi string, operasi matematika, pemformatan tanggal, dan lainnya, menawarkan kemampuan setara dengan templat Helm.

Fungsi Sprig umum meliputi:

  • Manipulasi string: trim, upper, lower, replace, plural, nospace

  • Operasi matematika: add, sub, mul, div, max, min

  • Pemformatan Tanggal: now, date, dateInZone, dateModify

  • Operasi Daftar: list, first, last, uniq, sortAlpha

  • Operasi Kamus: dict, get, set, hasKey, pluck

  • Kontrol Alur: ternary, default, empty, coalesce

  • Konversi Tipe: toString, toJson, toPrettyJson, toRawJson

  • Pengkodean/Pendekodean: b64enc, b64dec, urlquery, urlqueryescape

  • Generasi UUID: uuidv4

Untuk referensi lengkap semua fungsi yang tersedia, lihat dokumentasi fungsi Helm. GJSON Template mencakup set fungsi yang sama.

Sintaksis path GJSON

GJSON menyediakan kemampuan kueri JSON yang kuat:

  • Notasi Titik: address.city

  • Indeks array: users.0.name

  • Iterasi Array: users.#.name

  • Penyaringan Array: users.#(age>=30)#.name

  • Pengubah: users.@reverse.#.name

  • Path Ganda: {name:users.0.name,count:users.#}

  • Karakter escape: path.with\.dot

Untuk kueri yang lebih kompleks, Anda dapat menggunakan fungsi gjson:

<!-- Use the gjson function for complex queries -->
Active users: {{gjson "users.#(active==true)#.name"}}

<!-- Array filtering with multiple conditions -->
Active developers over 30: {{gjson "users.#(active==true && age>30)#.name"}}

<!-- Using modifiers -->
Usernames (reversed): {{gjson "users.@reverse.#.name"}}

<!-- Iterating over filtered results -->
Administrators:
{{range $user := gjson "users.#(roles.#(==admin)>0)#"}}
 - {{$user.name}} ({{$user.age}})
{{end}}

Untuk referensi sintaksis path GJSON lengkap, lihat dokumentasi GJSON.

Contoh konfigurasi

server:
  name: "quark-search"
  config:
    apiKey: "xxxx"

Konfigurasi ini menggunakan server MCP bawaan quark-search di Higress. Dalam kasus ini, Anda hanya perlu menentukan nama server dan konfigurasi yang diperlukan, seperti API key. Anda tidak perlu mengonfigurasi bidang tools karena tool sudah ditentukan sebelumnya di server.

Contoh dasar: Mengubah API AMAP

server:
  name: HTTP-amap-server
  config:
    apiKey: your-api-key-here
tools:
  - name: maps-geo
    description: "Converts a detailed, structured address into latitude and longitude coordinates. Supports resolving landmarks, scenic spots, and building names to coordinates."
    args:
      - name: address
        description: "The structured address to be resolved."
        type: string
        required: true
      - name: city
        description: "The city to query."
        type: string
        required: false
      - name: output
        description: "Output format."
        type: string
        enum: ["json", "xml"]
        default: "json"
    requestTemplate:
      url: "https://HTTPapi.amap.com/v3/geocode/geo"
      method: GET
      argsToUrlParam: true
      headers:
        - key: x-api-key
          value: "{{.config.apiKey}}"
    responseTemplate:
      body: |
        # Geocoding Information
        {{- range $index, $geo := .geocodes }}
        ## Location {{add $index 1}}

        - **Country**: {{ $geo.country }}
        - **Province**: {{ $geo.province }}
        - **City**: {{ $geo.city }}
        - **City Code**: {{ $geo.citycode }}
        - **District**: {{ $geo.district }}
        - **Street**: {{ $geo.street }}
        - **Street Number**: {{ $geo.number }}
        - **Adcode**: {{ $geo.adcode }}
        - **Location**: {{ $geo.location }}
        - **Level**: {{ $geo.level }}
        {{- end }}

Konfigurasi ini mengubah API geocoding AMAP menjadi tool yang dapat dipanggil AI. Saat AI memanggil tool ini:

  1. Membangun permintaan API menggunakan parameter address dan city yang diberikan.

  2. Memanggil API AMAP.

  3. Mengubah respons JSON menjadi format Markdown yang mudah dibaca.

  4. Mengembalikan hasil yang diformat ke asisten AI.

Contoh lanjutan: Penanganan respons kompleks dengan logika kondisional

server:
  name: weather-api-server
  config:
    apiKey: your-weather-api-key
tools:
  - name: get-weather
    description: "Gets the weather forecast for a specified city."
    args:
      - name: city
        description: "City name"
        type: string
        required: true
      - name: days
        description: "Number of days (1-7)"
        type: integer
        required: false
        default: 3
      - name: include_hourly
        description: "Specifies whether to include the hourly forecast."
        type: boolean
        default: true
    requestTemplate:
      url: "https://api.weatherapi.com/v1/forecast.json"
      method: GET
      argsToUrlParam: true
      headers:
        - key: x-api-key
          value: "{{.config.apiKey}}"
    responseTemplate:
      body: |
        # {{.location.name}}, {{.location.country}} Weather Forecast

        **Current Temperature**: {{.current.temp_c}}°C
        **Feels Like**: {{.current.feelslike_c}}°C
        **Condition**: {{.current.condition.text}}
        **Humidity**: {{.current.humidity}}%
        **Wind Speed**: {{.current.wind_kph}} km/h

        ## Future Forecast
        {{range $index, $day := .forecast.forecastday}}
        ### {{$day.date}} ({{dateFormat "Monday" $day.date_epoch | title}})

        {{if gt $day.day.maxtemp_c 30}}**High temperature warning!**{{end}}
        {{if lt $day.day.mintemp_c 0}}**Low temperature warning!**{{end}}

        - **Max Temperature**: {{$day.day.maxtemp_c}}°C
        - **Min Temperature**: {{$day.day.mintemp_c}}°C
        - **Chance of Rain**: {{$day.day.daily_chance_of_rain}}%
        - **Condition**: {{$day.day.condition.text}}

        #### Hourly Forecast
        {{range $hour := slice $day.hour 6 24 3}}
        - **{{dateFormat "15:04" $hour.time_epoch}}**: {{$hour.temp_c}}°C, {{$hour.condition.text}}
        {{end}}
        {{end}}
```<p>This example shows how to:</p><ul><li><p>Use conditional statements (<code data-tag="code" dir="auto" id="8a2cd16431wep">if

Contoh ini menunjukkan:

  • Menggunakan pernyataan kondisional (if) untuk memberikan peringatan suhu.

  • Menggunakan fungsi pemformatan tanggal (dateFormat) untuk memformat tanggal.

  • Menggunakan potongan array (slice) untuk memilih data cuaca pada waktu tertentu.

  • Menggunakan loop bersarang untuk menelusuri data cuaca lintas beberapa hari dan periode waktu.

Contoh penggunaan prependBody dan appendBody: Transformasi OpenAPI

Bidang prependBody dan appendBody berguna ketika Anda ingin mempertahankan respons API asli tetapi menambahkan konteks tambahan. Hal ini sangat berharga saat Anda mengubah spesifikasi OpenAPI atau Swagger menjadi tool MCP, karena Anda dapat mempertahankan respons JSON asli sambil memberikan penjelasan bidang untuk asisten AI.

server:
  name: product-api-server
  config:
    apiKey: your-api-key-here
tools:
  - name: get-product
    description: "Get product details"
    args:
      - name: product_id
        description: "Product ID"
        type: string
        required: true
    requestTemplate:
      url: "https://api.example.com/products/{{.args.product_id}}"
      method: GET
      headers:
        - key: Authorization
          value: "Bearer {{.config.apiKey}}"
    responseTemplate:
      prependBody: |
        # Product Information

        The following are the product details, returned in JSON format. Field descriptions:

        - **id**: The unique product identifier
        - **name**: The product name
        - **description**: The product description
        - **price**: The product price (USD)
        - **category**: The product category
        - **inventory**: Inventory information
        - **quantity**: The current stock quantity
        - **warehouse**: The warehouse location
        - **ratings**: A list of user ratings
        - **score**: The rating (1-5)
        - **comment**: The comment content
      appendBody: |

        You can use this information to understand the product's details, price, inventory status, and user reviews.

Contoh ini menunjukkan cara:

  • Menggunakan prependBody untuk menambahkan deskripsi bidang sebelum respons JSON asli.

  • Menggunakan appendBody untuk menambahkan saran penggunaan di akhir respons.

  • Mempertahankan respons JSON asli sehingga asisten AI dapat langsung mengakses semua data.

Sintaksis templat

Templat menggunakan sintaksis GJSON Template (https://github.com/higress-group/gjson_template), yang menggabungkan templat Go dengan sintaksis path GJSON untuk memproses JSON. Mesin templat mendukung fitur-fitur berikut:

  1. Notasi titik dasar untuk mengakses bidang, seperti `{{.fieldName}}`.

  2. Fungsi `gjson` untuk kueri kompleks, seperti `{{gjson "users.#(active==true)#.name"}}`.

  3. Semua fungsi templat Sprig, yang mirip dengan fungsi Helm, seperti `{{add}}`, `{{upper}}`, `{{lower}}`, dan `{{date}}`.

  4. Struktur kendali, seperti `{{if}}`, `{{range}}`, dan `{{with}}`.

  5. Anda dapat menetapkan variabel sebagai berikut: {{$var := .value}}.

Untuk respons JSON kompleks, Anda dapat menggunakan kemampuan penyaringan dan kueri GJSON untuk mengekstraksi informasi penting.

Templat pembuatan prompt AI

Saat Anda menghasilkan templat konfigurasi HTTP ke MCP dengan asisten AI, Anda dapat menggunakan prompt berikut:

Please help me create a Higress HTTP-to-MCP configuration to transform an HTTP API into an MCP tool.

## Configuration Format
The configuration should follow this format:
```yaml
server:
  name: HTTP-api-server
  config:
    apiKey: Your API key
tools:
  - name: tool-name
    description: "A detailed description of what this tool does"
    args:
      - name: arg1
        description: "Description of parameter 1"
        type: string
        required: true
        position: path
      - name: arg2
        description: "Description of parameter 2"
        type: integer
        required: false
        default: 10
        position: query
      - name: arg3
        description: "Description of parameter 3"
        type: array
        items:
          type: string
        position: body
      - name: arg4
        description: "Description of parameter 4"
        type: object
        properties:
          subfield1:
            type: string
          subfield2:
            type: number
    requestTemplate:
      url: "https://api.example.com/endpoint"
      method: POST
      # The following four options are mutually exclusive. Choose only one.
      argsToUrlParam: true  # Add parameters to the URL query string
      # or
      # argsToJsonBody: true  # Send parameters as a JSON object in the request body
      # or
      # argsToFormBody: true  # Send parameters form-encoded in the request body
      # or
      # body: |
      #   {
      #     "param1": "{{.args.arg1}}",
      #     "param2": {{.args.arg2}},
      #     "complex": {{toJson .args.arg4}}
      #   }
      headers:
        - key: x-api-key
          value: "{{.config.apiKey}}"
    responseTemplate:
      # The following three options are mutually exclusive. Choose only one.
      body: 
|
 # Results
 {{- range $index, $item := .items }}
 ## Item {{add $index 1}}
 - **Name**: {{ $item.name }}
 - **Value**: {{ $item.value }}
 {{- end }}
 # or
 # prependBody: |
 #   # API Response Description
 #
 #   The following is the raw JSON response. The field meanings are as follows:
 #   - field1: Meaning of field 1
 #   - field2: Meaning of field 2
 #
 # appendBody: |
 #
 #   You can use this data to...

Informasi API saya

HTTP API yang akan diubah adalah: [Jelaskan API Anda di sini, termasuk endpoint, parameter, dan format responsnya, atau tempelkan spesifikasi Swagger/OpenAPI].

Based on the information above, generate a complete configuration that includes:
1. A descriptive name and appropriate server configuration.
2. Definitions for all necessary parameters, with clear descriptions and appropriate types, required/default values.
3. The most suitable parameter passing method (argsToUrlParam, argsToJsonBody, argsToFormBody, or a custom body).
4. A responseTemplate that transforms the API response into a readable format suitable for AI consumption.