MCP ile Mistral Agents API'sini Kullanmak: Ne Kadar İyi?

Yapay zeka, metin üretimi ve görüntü tanımayı aşıyor. Yeni hedef: eylem, problem çözme ve anlamlı etkileşim. Mistral Agents API ile bu yönde önemli bir adım.

Efe Demir

Efe Demir

5 June 2025

MCP ile Mistral Agents API'sini Kullanmak: Ne Kadar İyi?

```html

Yapay Zeka (YZ), sadece metin üretmek veya görüntü tanımaktan hızla öteye geçiyor. Bir sonraki sınır, harekete geçebilen, sorunları çözebilen ve dünyayla anlamlı şekillerde etkileşime girebilen YZ ile ilgili. Alanında öne çıkan bir isim olan Mistral AI, Mistral Agents API'si ile bu yönde önemli bir adım attı. Bu güçlü araç seti, geliştiricilerin geleneksel dil modellerinden çok daha fazlasını yapabilen gelişmiş YZ aracıları oluşturmasına olanak tanır.

Temelinde, Agents API, genellikle dili anlamada ve üretmede harika olan ancak eylemleri gerçekleştirmekte, geçmiş etkileşimleri tutarlı bir şekilde hatırlamakta veya harici araçları etkili bir şekilde kullanmakta zorlanan standart YZ modellerinin sınırlamalarını aşmak için tasarlanmıştır. Mistral Agents API, güçlü dil modellerini çeşitli araçlara yerleşik bağlayıcılar, konuşmalar boyunca kalıcı bellek ve karmaşık görevleri koordine etme yeteneği gibi özelliklerle donatarak bu zorlukların üstesinden gelir.

Bunu, kitaplar hakkında konuşabilen çok bilgili bir kütüphaneciden, yalnızca bilgilere erişmekle kalmayıp aynı zamanda deneyler yapabilen, raporlar yazabilen ve birbirleriyle işbirliği yapabilen bir grup uzman araştırmacıya yükseltmek gibi düşünün. Bu yeni API, iş akışlarını otomatikleştirebilen, karmaşık karar verme süreçlerine yardımcı olabilen ve gerçekten etkileşimli deneyimler sağlayabilen kurumsal düzeyde YZ uygulamaları oluşturmanın temelini oluşturur.

💡
Harika API Dokümantasyonu oluşturan harika bir API Test aracı mı istiyorsunuz?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini çok daha uygun bir fiyata alıyor!
button

Mistral Agents'ı Bu Kadar Yetenekli Yapan Nedir?

Geleneksel dil modelleri, metin üretimi konusunda yetenekliyken, eylemleri yürütme veya uzun süreli etkileşimler boyunca bilgileri hatırlama konusunda genellikle yetersiz kalır. Mistral Agents API, Mistral'in son teknoloji dil modellerini, aracı iş akışları için tasarlanmış bir dizi güçlü özellikle birleştirerek bu sınırlamaları doğrudan ele alır.

Temel Yetenekler:

Agents API, temelinde şunları sağlar:

Bu API, yalnızca Chat Completion API'lerinin bir uzantısı değil; özellikle aracı kullanım durumlarının uygulanmasını basitleştirmek için tasarlanmış özel bir çerçevedir. İşletmelerin YZ'yi daha pratik, etkili ve eylem odaklı şekillerde dağıtmasını sağlayarak, kurumsal düzeyde aracı platformların omurgası olarak tasarlanmıştır.

Mistral Agents İş Başında: Gerçek Dünya Uygulamaları

Agents API'sinin çok yönlülüğü, çeşitli yenilikçi uygulamalar aracılığıyla sergilenmektedir:

Bellek, Bağlam ve Durumsal Konuşmalar

Agents API'sinin temel taşı, sağlam konuşma yönetimi sistemidir. Etkileşimlerin durumsal olmasını sağlar, yani bağlam zaman içinde korunur. Geliştiriciler konuşmaları iki ana yolla başlatabilir:

  1. Bir Aracı ile: Bir agent_id belirterek, belirli bir aracının önceden yapılandırılmış yeteneklerinden, araçlarından ve talimatlarından yararlanırsınız.
  2. Doğrudan Erişim: Modeli ve tamamlama parametrelerini doğrudan belirterek bir konuşma başlatabilir, önceden tanımlanmış bir aracı olmadan yerleşik bağlayıcılara hızlı erişim sağlayabilirsiniz.

Her konuşma, "konuşma girdileri" aracılığıyla yapılandırılmış bir geçmişi koruyarak, bağlamın titizlikle korunmasını sağlar. Bu durumsallık, geliştiricilerin geçmiş konuşmaları görüntülemesine, herhangi bir etkileşime sorunsuz bir şekilde devam etmesine ve hatta geçmişin herhangi bir noktasından yeni konuşma yolları başlatmasına olanak tanır. Ayrıca, API akış çıktılarını destekleyerek gerçek zamanlı güncellemeler ve dinamik etkileşimler sağlar.

Aracı Orkestrasyonu: İşbirliğinin Gücü

Agents API'sinin gerçek farklılaştırıcı gücü, birden fazla aracı orkestre etme yeteneğinde ortaya çıkar. Bu, tek bir monolitik YZ ile ilgili değil; birbiriyle uyum içinde çalışan, uzmanlaşmış aracıların bir senfonisiyle ilgili. Dinamik orkestrasyon sayesinde, karmaşık bir sorunun farklı yönlerini ele almak için her biri benzersiz becerilerini katkıda bulunarak, aracıların gerektiği gibi bir konuşmaya eklenmesi veya çıkarılması sağlanabilir.

Devir teslimlerle bir aracı iş akışı oluşturmak için:

  1. Aracılar Oluşturun: Her biri rolüne göre uyarlanmış belirli araçlar, modeller ve talimatlarla donatılmış, gerekli tüm aracıları tanımlayın ve oluşturun.
  2. Devir Teslimleri Tanımlayın: Hangi aracıların görevleri başkalarına devredebildiğini belirtin. Örneğin, birincil bir müşteri hizmetleri aracı, teknik bir sorguyu uzman bir sorun giderme aracısına veya bir faturalandırma sorgusunu bir finans aracısına devredebilir.

Bu devir teslimler, sorunsuz bir eylem zinciri sağlar. Tek bir kullanıcı isteği, her biri kendi belirlenmiş bölümünü özerk olarak ele alan, birden fazla aracı arasında bir dizi görevi tetikleyebilir. Bu işbirlikçi yaklaşım, gelişmiş gerçek dünya uygulamaları için sorun çözümünde benzeri görülmemiş verimlilik ve etkililik sağlar.

Mistral Agents API'sinin Temel Kullanımı

Mistral Agents API'sinin yeteneklerini anladıktan sonra, onunla nasıl etkileşim kuracağımızı inceleyelim. API, üç yeni birincil nesne sunar:

Özellikle, önce resmi bir "Aracı" nesnesi oluşturup referans vermeden, durumsal konuşmalar ve yerleşik bağlayıcılar gibi birçok özellikten yararlanabilirsiniz. Bu, daha basit kullanım durumları için esneklik sağlar.

Bir Aracı Oluşturma

Özel bir aracı tanımlamak için, API'ye birkaç parametre belirterek bir istekte bulunursunuz:

İşte basit bir aracı oluşturmak için bir cURL isteği örneği:

curl --location "https://api.mistral.ai/v1/agents" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "model": "mistral-medium-latest",
         "name": "Simple Agent",
         "description": "A simple Agent with persistent state."
     }'

Bir Aracı Güncelleme

Aracılar oluşturulduktan sonra güncellenebilir. Argümanlar, oluşturma için olanlarla aynıdır. Bu işlem, güncellenmiş ayarlara sahip yeni bir aracı nesnesiyle sonuçlanır ve bu da aracılarının sürüm oluşturulmasına olanak tanır.

curl --location "https://api.mistral.ai/v1/agents/<agent_id>" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "completion_args": {
           "temperature": 0.3,
           "top_p": 0.95
         },
         "description": "An edited simple agent."
     }'

Konuşmaları Yönetme

Bir aracı oluşturulduktan sonra (veya doğrudan erişim kullanıyorsanız), konuşmalar başlatabilirsiniz.

Bir Konuşma Başlatma:
Şunları sağlamanız gerekir:

Örnek (basit dize girişi):

curl --location "https://api.mistral.ai/v1/conversations" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Who is Albert Einstein?",
         "stream": false,
         "agent_id": "<agent_id>"
     }'

Bir Konuşmaya Devam Etme:
Mevcut bir konuşmaya eklemek için:

Örnek:

curl --location "https://api.mistral.ai/v1/conversations/<conv_id>" \
     --header 'Content-Type: application/json' \
     --header 'Accept: application/json' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Translate to French.",
         "stream": false,
         "store": true,
         "handoff_execution": "server"
     }'

Akış Çıktısı

Gerçek zamanlı etkileşimler için, hem konuşmaları başlatma hem de devam ettirme, stream: true ayarlanarak ve Accept başlığının text/event-stream olduğundan emin olarak akışa alınabilir.

curl --location "https://api.mistral.ai/v1/conversations" \
     --header 'Content-Type: application/json' \
     --header 'Accept: text/event-stream' \
     --header "Authorization: Bearer $MISTRAL_API_KEY" \
     --data '{
         "inputs": "Who is Albert Einstein?",
         "stream": true,
         "agent_id": "ag_06811008e6e07cb48000fd3f133e1771"
     }'

Akış yaparken, aşağıdakiler gibi yanıtın ilerlemesini ve içeriğini gösteren çeşitli olay türleri alacaksınız:

Bu temel işlemler, Mistral aracılarıyla dinamik ve etkileşimli uygulamalar oluşturmanın temelini oluşturur.

Mistral Agents API'sini Model Context Protocol (MCP) ile Entegre Etme

Yerleşik bağlayıcılar önemli bir güç sunarken, Mistral Agents'ın gerçek genişletilebilirliği, Model Context Protocol (MCP) ile birleştirildiğinde parlar.

MCP Nedir?

Model Context Protocol (MCP), YZ modellerinin çeşitli harici veri kaynakları, araçlar ve API'lerle entegrasyonunu kolaylaştırmak için tasarlanmış açık bir standarttır. YZ sistemlerinin gerçek dünya bağlamsal bilgilere verimli bir şekilde erişmesini ve bunları kullanmasını sağlayan standartlaştırılmış, güvenli bir arayüz sağlar. Çok sayıda özel entegrasyon oluşturmak ve sürdürmek yerine, MCP, YZ modellerinin canlı verilere ve sistemlere bağlanması için birleşik bir yol sunarak daha alakalı, doğru ve güçlü yanıtlar sağlar. Ayrıntılı bilgi için, resmi Model Context Protocol belgelerine bakın.

Mistral'in Python SDK'sı, aracıları MCP İstemcileriyle bağlamak için sorunsuz entegrasyon mekanizmaları sağlar. Bu, aracılarınızın, yerel bir araç, üçüncü taraf bir API veya özel bir kurumsal sistem olsun, bir MCP arayüzü sunan herhangi bir hizmet veya veri kaynağıyla etkileşim kurmasını sağlar.

Mistral Agents ile MCP'yi kullanmaya yönelik üç yaygın senaryoyu inceleyeceğiz: yerel bir MCP sunucusu, kimlik doğrulaması olmayan uzak bir MCP sunucusu ve kimlik doğrulaması olan uzak bir MCP sunucusu. Tüm örnekler eşzamansız Python kodu kullanacaktır.

Senaryo 1: Yerel Bir MCP Sunucusu Kullanma

Mistral aracınızın etkileşim kurmasını istediğiniz yerel bir komut dosyanız veya hizmetiniz (örneğin, özel bir hava durumu bilgisi sağlayıcısı) olduğunu hayal edin.

Adım 1: Mistral İstemcisini ve Kurulumu Başlatın
mistralai ve mcp'den gerekli modülleri içe aktarın. Buna Mistral, RunContext, StdioServerParameters (yerel işlem tabanlı MCP sunucuları için) ve MCPClientSTDIO dahildir.

import asyncio
import os
from pathlib import Path
from mistralai import Mistral
from mistralai.extra.run.context import RunContext
from mcp import StdioServerParameters
from mistralai.extra.mcp.stdio import MCPClientSTDIO
from mistralai.types import BaseModel

cwd = Path(__file__).parent
MODEL = "mistral-medium-latest" # Or your preferred model

async def main_local_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    # Define parameters for the local MCP server (e.g., running a Python script)
    server_params = StdioServerParameters(
        command="python",
        args=[str((cwd / "mcp_servers/stdio_server.py").resolve())], # Path to your MCP server script
        env=None,
    )

    # Create an agent
    weather_agent = client.beta.agents.create(
        model=MODEL,
        name="Local Weather Teller",
        instructions="You can tell the weather using a local MCP tool.",
        description="Fetches weather from a local source.",
    )

    # Define expected output format (optional, but good for structured data)
    class WeatherResult(BaseModel):
        user: str
        location: str
        temperature: float

    # Create a Run Context
    async with RunContext(
        agent_id=weather_agent.id,
        output_format=WeatherResult, # Optional: For structured output
        continue_on_fn_error=True,
    ) as run_ctx:
        # Create and register MCP client
        mcp_client = MCPClientSTDIO(stdio_params=server_params)
        await run_ctx.register_mcp_client(mcp_client=mcp_client)

        # Example of registering a local Python function as a tool
        import random
        @run_ctx.register_func
        def get_location(name: str) -> str:
            """Function to get a random location for a user."""
            return random.choice(["New York", "London", "Paris"])

        # Run the agent
        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Tell me the weather in John's location currently.",
        )

        print("Local MCP - All run entries:")
        for entry in run_result.output_entries:
            print(f"{entry}\n")
        if run_result.output_as_model:
            print(f"Local MCP - Final model output: {run_result.output_as_model}")
        else:
            print(f"Local MCP - Final text output: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_local_mcp())

Bu kurulumda, stdio_server.py, stdin/stdout üzerinden iletişim kuran, MCP sunucu mantığını uygulayan komut dosyanız olacaktır. RunContext etkileşimi yönetir ve register_mcp_client yerel MCP sunucusunu aracıya bir araç olarak kullanılabilir hale getirir. Ayrıca, @run_ctx.register_func kullanarak doğrudan yerel Python işlevlerini de kaydedebilirsiniz.

Yerel Bir MCP Sunucusu ile Akış:
Akış yapmak için, client.beta.conversations.run_stream_async kullanın ve olaylar geldikçe işleyin:

    # Inside RunContext, after MCP client registration
    # events = await client.beta.conversations.run_stream_async(
    #     run_ctx=run_ctx,
    #     inputs="Tell me the weather in John's location currently, stream style.",
    # )
    # streamed_run_result = None
    # async for event in events:
    #     if isinstance(event, RunResult): # Assuming RunResult is defined or imported
    #         streamed_run_result = event
    #     else:
    #         print(f"Stream event: {event}")
    # if streamed_run_result:
    #     # Process streamed_run_result
    #     pass

Senaryo 2: Kimlik Doğrulaması Olmayan Uzak Bir MCP Sunucusu Kullanma

Birçok genel veya dahili hizmet, kimlik doğrulaması gerektirmeden HTTP/SSE üzerinden bir MCP arayüzü sunabilir.

from mistralai.extra.mcp.sse import MCPClientSSE, SSEServerParams

async def main_remote_no_auth_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    # Define the URL for the remote MCP server (e.g., Semgrep's public MCP)
    server_url = "https://mcp.semgrep.ai/sse"
    mcp_client = MCPClientSSE(sse_params=SSEServerParams(url=server_url, timeout=100))

    async with RunContext(
        model=MODEL, # Can use agent_id too if an agent is pre-created
    ) as run_ctx:
        await run_ctx.register_mcp_client(mcp_client=mcp_client)

        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Can you write a hello_world.py file and then check it for security vulnerabilities using available tools?",
        )

        print("Remote No-Auth MCP - All run entries:")
        for entry in run_result.output_entries:
            print(f"{entry}\n")
        print(f"Remote No-Auth MCP - Final Response: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_remote_no_auth_mcp())

Burada, MCPClientSSE, uzak URL'ye işaret eden SSEServerParams ile kullanılır. Daha sonra aracı, bu uzak MCP sunucusu tarafından sağlanan araçlardan yararlanabilir. Akış, run_stream_async kullanılarak yerel MCP örneğiyle aynı deseni izler.

Senaryo 3: Kimlik Doğrulaması Olan Uzak Bir MCP Sunucusu Kullanma (OAuth)

OAuth2 kimlik doğrulaması gerektiren hizmetler (Linear, Jira vb. gibi) için, yetkilendirme akışını işlemek için birkaç adım daha gerekir.

from http.server import BaseHTTPRequestHandler, HTTPServer
import threading
import webbrowser
from mistralai.extra.mcp.auth import build_oauth_params

CALLBACK_PORT = 16010 # Ensure this port is free

# Callback server setup (simplified from source)
def run_callback_server_util(callback_func, auth_response_dict):
    class OAuthCallbackHandler(BaseHTTPRequestHandler):
        def do_GET(self):
            if "/callback" in self.path or "/oauth/callback" in self.path: # More robust check
                auth_response_dict["url"] = self.path
                self.send_response(200)
                self.send_header("Content-type", "text/html")
                self.end_headers()
                self.wfile.write(b"<html><body>Authentication successful. You may close this window.</body></html>")
                callback_func() # Signal completion
                threading.Thread(target=self.server.shutdown).start()
            else:
                self.send_response(404)
                self.end_headers()

    server_address = ("localhost", CALLBACK_PORT)
    httpd = HTTPServer(server_address, OAuthCallbackHandler)
    threading.Thread(target=httpd.serve_forever, daemon=True).start() # Use daemon thread
    redirect_url = f"http://localhost:{CALLBACK_PORT}/oauth/callback"
    return httpd, redirect_url

async def main_remote_auth_mcp():
    api_key = os.environ["MISTRAL_API_KEY"]
    client = Mistral(api_key=api_key)

    server_url = "https://mcp.linear.app/sse" # Example: Linear MCP
    mcp_client_auth = MCPClientSSE(sse_params=SSEServerParams(url=server_url))

    callback_event = asyncio.Event()
    event_loop = asyncio.get_event_loop()
    auth_response_holder = {"url": ""}

    if await mcp_client_auth.requires_auth():
        httpd, redirect_url = run_callback_server_util(
            lambda: event_loop.call_soon_threadsafe(callback_event.set),
            auth_response_holder
        )
        try:
            oauth_params = await build_oauth_params(mcp_client_auth.base_url, redirect_url=redirect_url)
            mcp_client_auth.set_oauth_params(oauth_params=oauth_params)
            login_url, state = await mcp_client_auth.get_auth_url_and_state(redirect_url)

            print(f"Please go to this URL and authorize: {login_url}")
            webbrowser.open(login_url, new=2)
            await callback_event.wait() # Wait for OAuth callback

            token = await mcp_client_auth.get_token_from_auth_response(
                auth_response_holder["url"], redirect_url=redirect_url, state=state
            )
            mcp_client_auth.set_auth_token(token)
            print("Authentication successful.")
        except Exception as e:
            print(f"Error during authentication: {e}")
            return # Exit if auth fails
        finally:
            if 'httpd' in locals() and httpd:
                httpd.shutdown()
                httpd.server_close()
    
    async with RunContext(model=MODEL) as run_ctx: # Or agent_id
        await run_ctx.register_mcp_client(mcp_client=mcp_client_auth)

        run_result = await client.beta.conversations.run_async(
            run_ctx=run_ctx,
            inputs="Tell me which projects do I have in my Linear workspace?",
        )
        print(f"Remote Auth MCP - Final Response: {run_result.output_as_text}")

# if __name__ == "__main__":
#     asyncio.run(main_remote_auth_mcp())

Bu, OAuth yönlendirmesini yakalamak için yerel bir HTTP sunucusu kurmayı, kullanıcıyı sağlayıcının yetkilendirme sayfasından yönlendirmeyi, alınan kodu bir erişim belirteciyle değiştirmeyi ve ardından MCPClientSSE'yi bu belirteçle yapılandırmayı içerir. Kimlik doğrulamasından sonra, aracı korumalı MCP hizmetiyle etkileşim kurabilir. Akış yine yerleşik deseni izler.

Sonuç: Gelecek Aracı ve Birbirine Bağlı

Mistral Agents API, özellikle Model Context Protocol ile desteklendiğinde, yeni nesil YZ uygulamaları oluşturmak için sağlam ve esnek bir platform sunar. Aracıların yalnızca akıl yürütmesini ve iletişim kurmasını değil, aynı zamanda çok çeşitli araçlar, veri kaynakları ve hizmetlerle etkileşim kurmasını sağlayarak, geliştiriciler karmaşık, gerçek dünya sorunlarını ele alabilen gerçekten akıllı sistemler oluşturabilirler. İster karmaşık iş akışlarını otomatikleştiriyor, ister derinlemesine bağlamsallaştırılmış yardım sağlıyor, isterse insan-YZ işbirliğinin yeni biçimlerine öncülük ediyor olun, Mistral Agents ve MCP'nin kombinasyonu bu heyecan verici gelecek için temel araç setini sağlar. MCP standardı daha geniş çapta benimsendikçe, birbirine bağlı ve son derece yetenekli YZ aracıları oluşturma potansiyeli artmaya devam edecektir.

💡
Harika API Dokümantasyonu oluşturan harika bir API Test aracı mı istiyorsunuz?

Geliştirici Ekibinizin maksimum verimlilikle birlikte çalışması için entegre, Hepsi Bir Arada bir platform mu istiyorsunuz?

Apidog tüm taleplerinizi karşılıyor ve Postman'in yerini

Explore more

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Fathom-R1-14B: Hindistan'dan Gelişmiş Yapay Zeka Muhakeme Modeli

Yapay zeka hızla gelişiyor. FractalAIResearch/Fathom-R1-14B, 14.8 milyar parametreyle matematik ve genel akıl yürütmede başarılı.

5 June 2025

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code: İşletmeler için En Özelleştirilebilir Yapay Zeka Destekli Kodlama Asistanı

Mistral Code'u keşfedin: Kurumsal kullanıma özel, en özelleştirilebilir yapay zeka destekli kodlama asistanı.

5 June 2025

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code'un 2025'te Yapay Zeka Kodlamasını Nasıl Dönüştürdüğü

Claude Code, 2025'te yapay zeka destekli kodlamayı nasıl devrimleştiriyor? Özelliklerini, kullanımını ve Windsurf kısıtlamalarından sonra neden popüler olduğunu öğrenin. Geliştiriciler için okunması gereken!

5 June 2025

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin