MCPを使いローカルサーバーで立てたLM Studioへアクセスしてみる。【Python,C#】

京都名所之内 通天橋ノ紅楓 コンピュータ
京都名所之内 通天橋ノ紅楓

MCPはAIサーバーにプログラムなどからアクセスするプロトコルらしいので、LM Studioで起動したローカルサーバーへアクセスしてみたいと思います。

LM Studioインストール

LM Studioサーバー起動

起動手順

・「Developer」アイコンをクリック。

・「Status: Running」スイッチをONにする。

モデルがロードした状態であればサーバーが起動しているはずです。


サーバーの起動確認

Webブラウザからhttp://127.0.0.1:1234/v1/modelsにアクセスしてみます。

結果

{
  "data": [
    {
      "id": "openai/gpt-oss-20b",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "text-embedding-nomic-embed-text-v1.5",
      "object": "model",
      "owned_by": "organization_owner"
    }
  ],
  "object": "list"
}

pythonスクリプトからアクセス

pipパッケージインストール

pip install OpenAI

サンプルスクリプト

# pip install openai
from openai import OpenAI

# LM Studio はAPIキー不要ですが、クライアントが必須の場合はダミー文字列でOK
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")

# Chat Completions
resp = client.chat.completions.create(
    model="gpt-oss-20b",  # LM Studioで起動したモデル名
    messages=[{"role": "user", "content": "テストで自己紹介して"}],
    temperature=0.7,
)
print(resp.choices[0].message.content)

# Embeddings(対応モデルを使う)
emb = client.embeddings.create(
    model="nomic-embed-text", 
    input="埋め込みを取りたいテキスト"
)
print(len(emb.data[0].embedding))

実行結果

PS J:\py> python mcp_sample.py
こんにちは!  
私はOpenAIが開発した言語モデル「ChatGPT(GPT‑4)」です。

- **役割**:質問に答えたり、文章を作成したり、アイデアのブレインストーミングや学習サポートなど、幅広いテキストベースのタスクをお手伝いします。
- **特徴**:膨大なテキストデータで学習しているので、さまざまなトピックについて自然な会話ができます。ただし、リアルタイムの情報は持っていないので、最新のニュースや特定の個人情報には対応できません。
- **使い方**:質問を入力するだけで、答えや提案・説明などを返します。日本語でも英語でもほぼ同じレベルで応対できます。

何か知りたいことや手伝って欲しいことがあれば、気軽に聞いてくださいね!
768

成功している模様

C#からアクセス

パッケージの追加

dotnet add package OpenAI

サンプルソースコード

ファイル名:MCPSample01.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OpenAI" Version="2.5.0" />
  </ItemGroup>

</Project>

ファイル名:Program.cs

// dotnet add package OpenAI
using System;
using OpenAI;
using OpenAI.Chat;
using System.ClientModel; // ApiKeyCredential

class Program
{
    static void Main()
    {
        // LM Studio 用(OpenAI互換API)
        var endpoint = new Uri("http://localhost:1234/v1");
        var credential = new ApiKeyCredential("lm-studio");
        var options = new OpenAIClientOptions { Endpoint = endpoint };

        var client = new ChatClient(
            model: "gpt-oss-20b",
            credential: credential,
            options: options
        );

        // 会話送信
        var result = client.CompleteChat("こんにちは!自己紹介して");
        var content = result.Value.Content[0].Text;

        Console.WriteLine(content);
    }
}

実行結果

PS J:\csharp\console\MCPSample01> dotnet run
こんにちは!  
私はChatGPT、OpenAIが開発した大規模言語モデルです。日本語をはじめとする多くの言語で会話ができ、質問に答えた り、文章を書いたり、アイデアを出したりといろんなサポートができます。まだ「個人的な経験」や感情は持っていませんが、皆さんのお役に立てるよう日々学び続けています。何か聞きたいことや相談したいことがあれば、ぜひ教えてくださいね!

こちらも成功している模様

サンプル2

using System;
using OpenAI;
using OpenAI.Embeddings;
using System.ClientModel; // ApiKeyCredential

class Program
{
    static void Main()
    {
        // LM Studio のローカル API サーバー設定
        var endpoint = new Uri("http://localhost:1234/v1");
        var credential = new ApiKeyCredential("lm-studio");
        var options = new OpenAIClientOptions { Endpoint = endpoint };

        // EmbeddingsClient を作成
        var embedClient = new OpenAI.Embeddings.EmbeddingClient(
            model: "nomic-embed-text-v1.5",   // LM Studio で起動中の埋め込みモデル名
            credential: credential,
            options: options
        );

        // 例: 1 文を埋め込みに変換
        var result = embedClient.GenerateEmbedding("埋め込みを取りたいテキスト");

        ReadOnlyMemory<float> vector = result.Value.ToFloats();
        Console.WriteLine($"Embeddings: [{string.Join(", ", vector.ToArray())}]");
    }
}

・実行結果

PS J:\csharp\console\MCPSample01> dotnet run
Embeddings: [0.043835755, 0.056792505, -0.15037978, 0.019975562, -0.015564927, -0.025705187, -0.00073462434, -0.042660233, -0.027092138, 0.01866094, -0.05635417, -0.049046226, -0.028958574, 0.037907574, 0.0047005597, -0.040786948, 0.017513124, -0.062054034, -0.050633382, 0.027921043, -0.0043201754, 0.008566015, -0.07035987, -0.018121611, 0.06117353, -0.0030513015, 0.04197316, 0.024415849, 0.017412368, -0.015623202, -0.020070793, -0.06473138, 0.015298363, -0.028627636, -0.012430691, -0.025781114, 0.06582428, 0.05624838, -0.0054762918, -0.029682012, -0.03849815, -0.04509343, -0.003087766, -0.014807141, 0.044912342, 0.021737633, -0.009077967, -0.033644922, 0.035271116, -0.0038458107, 0.009929091, 0.004978326, -0.025936777, -0.026776487, 0.01569168, -0.01167113, 0.015426576, -0.02965397, 0.0107630575, -0.044369318, -0.010100684, 0.051632408, -0.0045458004, 0.035873793, 0.0032016097, -0.035619527, -0.036859587, 0.07990597, 0.044125237, -0.018870495, 0.03960288, 0.00037037986, 0.046510335, 0.038951773, -0.00085373275, -0.029788082, -0.037934672, -0.037028406, -0.011671859, 0.007149304, -0.012060408, -0.01507285, 0.031234194, 0.013132278, 0.06693698, 0.0072584366, -0.02527566, -0.049972057, 0.023565492, 0.057597958, 0.032041173, -0.014452111, 0.04782093, -0.0004987099, -0.03381871, 0.040291943, -0.04370636, 0.052710786, 0.026456088, -0.0065185335, 0.015950577, -0.0050646574, 0.037704304, 0.010523246, 0.015781233, -0.027106043, -0.020840574, 0.017452145, -0.015437611, 0.0126344655, -0.01633713, 0.0531091, -0.03363478, 0.0207562, 0.025921635, 0.012914417, -0.0048420695, 0.02286016, -0.05878878, 0.025012223, -0.0050098887, -0.013548464, 0.014283655, 0.03642792, 0.017605012, 0.0015279801, -0.031006362, 0.0005078121, 0.033266596, -0.07585489, 0.019603195, 0.0044139274, -0.026176, -0.0039667943, -0.0484576, -0.0013184818, -0.014301055, -0.0391144, 0.03628559, -0.01893055, 0.01693309, 0.010975882, 0.018105084, -0.089740664, -0.017989889, 0.011953307, 0.020871596, 0.0014182474, 0.00014138871, -0.0042727054, -0.021462599, -0.04014336, 0.006243319, 0.012282652, 0.04756199, -0.05314985, -0.018787676, 0.011928075, 0.016962094, -0.005431363, 0.03966833, 0.058894787, -0.010246187, 0.036326457, 0.03585292, -0.05755512, 0.06168606, 0.071235195, 0.039176196, -0.0132699795, -0.10395917, -0.06894908, -0.056198474, 0.052361142, 0.018691316, 0.006689071, 5.2748474E-06, -0.021033816, 0.0026317337, -0.052394, -0.022016538, -0.03710942, 0.020473268, -0.0048387954, -0.008649044, -0.027576162, 0.020509863, 0.019117163, -0.090037614, 0.024149943, 0.02960138, 0.040560797, -0.058379997, -0.006759124, 0.014127481, -0.011589091, 0.04233482, 0.0041486584, 0.03394674, 0.03884184, -0.003736993, 0.0069806483, -0.06494902, 0.0059209126, -0.057455264, 0.063721314, 0.021346211, 0.0213623, -0.010997449, -0.03919516, 0.008160731, -0.026822794, 0.028134737, -0.016584042, 0.03380803, -0.003982068, -0.0047441414, -0.011743736, -0.021269264, -0.020948246, -0.00305172, -0.062043536, 0.0033791307, 0.0063764974, -0.019463938, -0.009893703, 0.0033359705, -0.0343989, -0.020238873, 0.017092234, -0.02411725, -0.07453229, 0.05551448, 0.0077255545, 0.015583077, 0.06718991, -0.0032421462, 0.03220306, 0.02346565, 0.018402684, 0.027164742, 0.014013254, 0.013736443, -0.0037229732, -0.076899774, 0.06377946, 0.05487334, 0.0032998528, -0.022497896, 0.059797738, -0.010250966, 0.0006659456, 0.0029630854, 0.018524075, 0.0355715, 0.0028600881, -0.06735067, -0.006515605, 0.024925772, 0.0059793284, -0.0039671757, -0.06927717, -0.013319229, -0.009449916, -0.037863318, 0.025949994, -0.03427365, -0.068595886, 0.0017783303, -0.0017056982, 0.03127729, 0.013307701, 0.0029480078, 0.040758338, -0.061935708, -0.020005058, 0.07231589, -0.026715988, 0.0027305845, 0.016351473, 0.009602913, 0.016993348, -0.027886137, -0.016928809, 0.061886, 0.014883228, -0.012882347, 0.012268507, 0.0053008413, 0.051605076, -0.023082763, -0.022670304, 0.035507336, 0.067638546, -0.0043936395, 0.010860857, 0.05750242, 0.022759194, 0.0176405, 0.0032111728, 0.029256927, 0.0061643813, 0.016930794, 0.018414257, 0.034829598, -0.0352012, 0.04822219, -0.006903225, 0.044880725, -0.0300926, -0.05555491, 0.053132977, 0.041246224, 0.060709074, -0.074894145, 0.08613993, 0.034275156, 0.05293905, -0.00025797816, 0.03900855, 0.051450446, -0.018654592, 0.0014139516, -0.033552952, 0.006940638, 0.047089756, -0.008353984, -0.0009817902, -0.014233395, 0.043385547, -0.025208019, 0.045067877, 0.023188727, -0.010747146, -0.024521945, 0.043177847, -0.001036019, -0.023233978, -0.007524387, 0.013858528, 0.09171567, -0.00805064, 0.005167244, -0.08017869, -0.025253965, -0.026269816, 0.0091074, 0.000662761, -0.00092328596, 0.07371382, -0.024030967, 0.00095822447, -0.025576256, -0.012341365, -0.033348083, -0.0023378355, 0.03670878, 0.047135524, 0.03289097, -0.030746283, 0.058486454, -0.0073144217, 0.026096005, -0.043982096, -0.009176507, 0.038182333, -0.023170985, 0.027968295, 0.010478352, 0.031085875, -0.04088802, -0.02656463, 0.01848863, 0.0055232947, -0.007702665, 0.011438599, 0.007941298, -0.019143874, 0.012667524, 0.036283407, 0.0037397526, -0.028689427, 0.05745537, -0.01959356, -0.009799706, -0.009044508, 0.012832522, 0.019400127, -0.05012269, 0.012119862, 0.018425949, -0.0042661764, -0.07896182, 0.0335619, 0.041468497, -0.022688627, 0.046199754, 0.040554814, -0.012542413, 0.0059649036, -0.033100426, -0.022813769, -0.01098729, -0.029959572, -0.0036152273, 0.016945884, 0.0006366463, -0.01376772, 0.10923191, 0.041533146, 0.024462054, 0.0020436933, -0.029516209, 0.0004589, -0.027813453, 0.069872424, 0.014289607, 0.0058454857, 0.0037496532, -0.00052017655, -0.018144837, 0.02907291, 0.003396924, 0.0021010488, -0.028588615, 0.058019493, 0.018935155, 0.035596855, -0.006298439, -0.07283773, -0.012555484, 0.015864452, 0.020708788, -7.055137E-05, 0.01951085, -0.009154061, 0.036079988, 0.028255828, -0.014822156, 0.027143016, -0.032093193, 0.01146677, -0.07050157, -0.07852933, 0.020764185, 0.05826394, 0.007911549, -0.048992604, -0.033301562, 0.009685409, -0.022177638, 0.004426207, -0.022641385, 0.02976926, 0.036056247, -0.06005567, -0.022492543, 0.012656772, -0.07133873, 0.045895014, 0.0713358, 0.031811118, -0.027707657, 0.0006772588, -0.012646246, -0.010603346, 0.033027478, 0.003610658, -0.014514455, 0.10656483, -0.008521464, -0.026184488, 0.03959274, -0.023354951, 0.011757191, 0.023327608, -0.06771084, -0.037797943, 0.02326074, 0.077475205, -0.04174393, -0.046116475, -0.06253262, -0.0787122, 0.07791443, 0.027708286, 0.0045524, -0.019758036, 0.035527244, -0.030075427, 0.023913264, 0.020197857, -0.028722005, -0.006507017, -0.03984043, -0.041511368, -0.0042404677, 0.049595065, 0.042808726, -0.036813483, -0.0019490889, -0.0109400675, -0.017632306, 0.0056904336, 0.055533957, -0.05786883, -0.011045031, -0.069609985, -0.034429885, 0.063013345, -0.017814025, 0.014270921, 0.003976769, -0.0024464724, 0.063733146, -0.028433643, 0.038760748, -0.0070662014, -0.015331869, -0.00934458, 0.050440144, -0.05244807, 0.023319965, -0.03201267, -0.07310643, 0.00966394, 0.017359752, -0.06598223, 0.058594905, -0.0024065543, 0.0042068944, -0.0031125478, -0.031025266, 0.010821768, -0.0025981683, -0.027140351, -0.0025518264, -0.0026789894, 0.017842982, 0.032419436, -0.022392506, 0.033278752, 0.033904273, 0.04574628, 0.0062423553, 0.05382447, -0.026972182, 0.0064894347, 0.008896647, -0.028811025, 0.07661243, -0.050062325, -0.02927694, -0.058684897, 0.010930366, -0.048624616, -0.027722823, 0.002152047, 0.040657997, -0.03194577, 0.030351933, -0.016564528, -0.017997038, -0.039218068, 0.05214946, -0.04950643, 0.025761614, 0.025170658, 0.009763197, 0.045227304, 0.025127264, -0.06431702, -0.06688287, -0.0048905956, -0.029306317, 0.021619445, 0.020797856, 0.030770572, -0.08116804, -0.0012720384, -0.0032504313, -0.00957149, -0.06277822, -0.027127517, -0.06521166, 0.016185466, -0.021732496, -0.07831206, 0.017732996, -0.04969492, -0.054571453, 0.008628077, 0.00070805795, 0.00732464, 0.026321577, 0.005873115, -0.014717409, -0.028617216, 0.0029917608, 0.08021484, -0.012909571, 0.029938793, 0.052576985, 0.008305039, 0.0159659, 0.0543484, -0.025313683, 0.08335904, 0.0014115784, -0.015049201, 0.04616248, 0.0039571524, -0.035711948, -0.047458585, 0.03402343, -0.016761063, 0.04317679, -0.03445303, -0.059083905, -0.056950517, 0.012399136, -0.014125028, 0.05063005, -0.0069906795, 0.0138334045, -0.03024559, -0.016307442, -0.045049183, -0.0013264896, -0.002824796, -0.042471785, -0.0526812, -0.00025784216, 0.010015947, -0.029442476, -0.0021359215, 0.06234008, 0.011233628, -0.015245817, 0.045734044, 0.012893523, 0.005912435, 0.005107081, -0.008620791, 0.028571926, 0.012157455, 0.027503917, 0.08897295, 0.05672089, -0.053050492, 0.06977969, 0.021854175, 0.03376357, 0.027627619, -0.014470359, 0.032654908, -0.039258763, -0.09690838, -0.06928771, -0.04299661, 0.002721714, -0.009767272, 0.021921005, -0.013283548, -0.049650114, -0.030322686, 0.004064996, 0.0014717942, -0.08067339, -0.01844392, 0.009435529, -0.016139254, -0.08001238, -0.02254707, 0.027622024, 0.036547475, 0.022195984, 0.043108966, 0.0064697596, -0.0070311, -0.03236725, 0.00031257438, 0.0023322015, 0.0015271013, 0.00813395, 0.013058395, 0.023033509, 0.0041183145, -0.009209521, -0.035807922, -0.046285655, -0.0345908, -0.022451388, 0.00035075465, -0.027463077, 0.0474872, 0.014723826, 0.004211928, -0.05725207, -0.0035131788, -0.012907763, 0.021080006, -0.015198937, 0.02140301, -0.010000798, -0.034802232, -0.005189223, 0.039107606, 0.027043156, -0.005104954, -0.00487997, -0.00548043, -0.022672474, 0.10440089, -0.035492774, 0.04999498, -0.067483425, -0.068350784, -0.02781242, 0.0521058, 0.05842751, 0.06189889, -0.044359904, -0.038075555, -0.035284422, -0.053150456, 0.03668088, -0.058513675, 0.08823034, -0.026498873, 0.046768866, -0.0008161495, -0.048128333, -0.013435227, 0.034195762, 0.0148645, 0.0034658313, -0.028815309, 0.0258849, 0.026615372, -0.06688787, 0.016804906, 0.028808838, 0.037172418, 0.020345537, 0.04079066, -0.008203597, -0.0010567148, -0.014163361, -0.011977683, -0.024408702, 0.010324003, -0.028156452, 0.035262182, 0.034235157, -0.0111079095, -0.003835779, -0.024012772, 0.07635713, 0.014481342, 0.012984406, -0.021017171, 0.01299883, -0.06642115, -0.005573501, 0.03626963, -0.03170436, -0.050546788]

感想

今回は、LM StdioでLLMをサーバーで起動し、PythonスクリプトとC#からアクセスしてみました。
アクセスするだけなら比較的簡単に実行することが出来ました。
MCPを利用したユーザープログラムからLLMを利用する方法のパスが開きましたので、なにか面白い使い道を考えたいと思います。

コメント