Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby and LLM Ecosystem 2nd
Search
Koichi ITO
March 11, 2026
Programming
1
1.3k
Ruby and LLM Ecosystem 2nd
Rubyセミナー オンライン (
https://www.ruby.or.jp/ja/news/20260106
)
Koichi ITO
March 11, 2026
Tweet
Share
More Decks by Koichi ITO
See All by Koichi ITO
STYLE
koic
0
2.1k
Ruby and LLM Ecosystem
koic
3
9.7k
Write Code Every Day
koic
1
2.4k
Bliki (ja), and the Cathedral, and the Bazaar
koic
7
3k
Welcome to the LLM Club
koic
0
380
RuboCop: Modularity and AST Insights
koic
3
5.5k
Carving the Way to Ruby Engineering
koic
3
1.2k
Beyond the RuboCop Defaults
koic
3
5.1k
Minify Ruby Code
koic
2
2.5k
Other Decks in Programming
See All in Programming
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
250
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
Nuxt Server Components
wattanx
0
150
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
410
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.5k
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.4k
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
430
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
120
The free-lunch guide to idea circularity
hollycummins
0
380
AI活用のコスパを最大化する方法
ochtum
0
340
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
180
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
300
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
400
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
700
Automating Front-end Workflow
addyosmani
1370
200k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
180
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
100
エンジニアに許された特別な時間の終わり
watany
106
240k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Transcript
3VCZͰ--.ΞϓϦέʔγϣϯ ։ൃΛࢧ͑Δجૅٕज़ Ruby x LLM Ecosystem ҏ౻ߒҰ&4. *OD 3VCZηϛφʔΦϯϥΠϯ
ਫ <૿ิվగ൛>
w044ϓϩάϥϚʔ w3VCP$PQίΞνʔϜίϛολʔ w.$1TUFFSJOHHSPVQϝϯόʔ</&8> wגࣜձࣾӬγεςϜϚωδϝϯτ &4. *OD ΤϯδχΞϦϯάϚωʔδϟʔ σΟεςΟϯάΠογϡυɾΤϯδχΞ @koic
None
࠾༻ͱಇ͖ํͷଟ༷Խ wਓੜͷঢ়گʹ͋Θͤͨ ϥΠϑελΠϧΛଚॏ͢Δ wؔ౦ݍɺҪɺ࣎լɺژ Վࢁɺౡࠜɺٶ࡚͔Βͷ ϦϞʔτϫʔΫ 🗾
Support OSS community
w มԽͷ͍--.पลٕज़ʹ͍ͭͯͷ w ༧ࢉͷ͍ͭͨ෦׆ಈ w Ӭࣾ4MBDLͷMMNDMVCνϟϯωϧ w ೖࣾ͢Δ͚ͩͰɺΕͳ͘ೖ෦Ͱ͖·͢ w ઈࢍ෦һืूத
େنݴޠϞσϧ --. ݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM
ࠓͷ
IUUQTXXXSVCZPSKQKBOFXT
☝ 38$Ͱ͓ͨ͠͠࠷৽ͷٕज़ಈΛ࠷৽ͷٕज़ಈʹΞοϓσʔτ͠·ͨ͠ IUUQTSVCZXPSMEDPOGPSHKBBCPVU ϦόΠόϧߨԋ RubyWorld Conference 2026 202612݄3͔Β4ͷ։࠵
--.େنݴޠϞσϧ 3"(ݕࡧ֦ுੜ .$1ϞσϧίϯςΩετϓϩτίϧ "HFOU4LJMMTΤʔδΣϯτεΩϧ 3VCZY--.ͷՄೳੑ
࣍ Ruby 4.0.1, Langchain.rb 0.19.5, MCP Ruby SDK 0.8.0
-BSHF-BOHVBHF.PEFM --.
w ػցֶशͱ͍͑1ZUIPOͱֶͱ͍͏ੈք ͔Βɺ--.ͷࣗવݴޠͷϓϩϯϓςΟϯά Ͱ୭Ͱ"*͕࣮༻Մೳʹͳͬͨ w ςΩετੜͷ--.ͱը૾ɺԻɺಈըੜ ʹΘΕΔ%J ff VTJPO.PEFM͕ݱ"*ͷՖܗ --.ͱ͍͏ήʔϜνΣϯδϟʔ
֦ࢄϞσϧ େنݴޠϞσϧ --.ίϯςΩετʹର࣍͠τʔΫϯΛࣗݾճؼతʹ༧ଌ͠ଓ͚Δ֬తੜϞσϧ
w นଧͪ"*ٞࣄɺ/PUFCPPL-.Ϗδωε׆༻ w $MBVEF$PEF$PEFYͰ"HFOUJD7JCF$PEJOH w ΞϓϦέʔγϣϯͷ--.ΈࠐΈ w --.ͷ"1*ɺ3"(ɺ.$1πʔϧ։ൃ w --.ࣗମ0MMBNBͳͲ--.࣮ߦج൫։ൃ
w BS9JWͷจͷධࣥච͢Δऀ --.ͱͷ༷ʑͳؔΘΓ ָ͠Έ ํ
w ΫϥΠΞϯτͱαʔόʔͰίʔυڞ༗Մೳͳ 6OJWFSTBM+BWB4DSJQUͷੈք w 1ZUIPOͰػցֶशΛॻ͘ͳΒɺ8FC·Ͱؚ Ίͯ1ZUIPOͱ͍͏ͷ64ͷைྲྀ ෩ฉ w --.पลͷ࣮ߦڥΛ3VCZͰॻ͚Εɺ
3VCZ3BJMTͷ··--.ΛΈࠐΊΔ ຊ 3VCZͷීวੑ
--.ΞϓϦέʔγϣϯ։ൃ IUUQTHJUIVCDPNMBOHDIBJOBJSBHGSPNTDSBUDI ੈͷதͰ--. ΞϓϦ։ൃݚڀ ͕ਐΜͰ͓Γɺ 1ZUIPO4%,ʹ ࣮ݶΒͳ͍ 3VCZͷग़൪ʂ
--.ΞϓϦྫ (VNSPBE IUUQTHJUIVCDPNBOUJXPSLHVNSPBECMPCQSPEVDUJPOGBBBDBQQNPEFMTQSPEVDU@SFGVOE@QPMJDZSC 5IBOLT(JO[BSC
w 0QFO"*"1*Λ3VCZ͔Β͏HFN w ΞϓϦଆ͔Β--.Λݺͼग़͢جຊ 3VCZ0QFO"*HFN OpenAI::Client.new.chat( parameters: { messages: [{role:
"user", content: prompt}], model: "gpt-4o-mini", temperature: 0.0, max_tokens: 10 } ) # gem 'ruby-openai' IUUQTHJUIVCDPNBOUJXPSLHVNSPBECMPCQSPEVDUJPOGBBBDBQQNPEFMTQSPEVDU@SFGVOE@QPMJDZSC-- LLMͷϓϩϯϓςΟϯάจࣈྻ
w ϧʔϧϕʔεͰϓϩάϥϛϯάͰ͖Δܾఆੑ ͷͷ͔ΒᷓΕͨɺਓ͕ӡ༻ͰΧόʔͯ͠ ͍ͨඇܾఆੑͷྖҬΛ·ͣ--.ͰΧόʔ͢Δ w --.ΛͬͨνϟοτΞϓϦέʔγϣϯ ྫ2"γεςϜ ཁػೳ w
ΞϓϦͷใΛݩʹ--.ͰཁఏҊΛੜ --.ΞϓϦͷߟ͑ํͱ༻ྫ
3"( 3FUSJFWBM"VHNFOUFE(FOFSBUJPO
w --.ͷֶशσʔλτϨʔχϯά͠ϦϦʔε ͨ࣌͠ʹݶΒΕΔͨΊɺֶशҎޙͷ࠷৽ ใඇެ։ใͷ֎෦ࣝΛ͍࣋ͬͯͳ͍ w ରԠͱͯ͠--.Λνϡʔχϯά͢Δख๏ͱɺ ֎෦ࣝΛݕࡧͯ͠ϓϩϯϓτʹຒΊࠐΉ ख๏͕͋Δ --.ͷಛੑͱͦͷରॲ
w 1ZUIPOͰ1Z5PSDI5FOTPS'MPX͕ɺ --.ͷτϨʔχϯάʹΘΕΔ Β͍͠ w ྫ͑1Z5PSDIͷ3VCZόΠϯσΟϯάʹ 5PSDISC͕͋Δ͕ɺ--.ͷτϨʔχϯά 1ZUIPOΛ͓ͬͯ͘ͷ͕Θ͔Γ͍͔͢ʁ --.ͦͷͷͷ܇࿅ௐ
τϨʔχϯάେͳܭࢉྔͱిྗ͕ඞཁͰɺຊؾͳΒσʔληϯλʔͷೖख͔Βʂʁ Training Fine-turning
'JOFUVSOJOHWT3"( IUUQTXXXBOZTDBMFDPNCMPH fi OFUVOJOHJTGPSGPSNOPUGBDUT w 'JOFUVSOJOH ݴ༿ݣ͍ग़ྗͱ ͍͏දݱ 'PSN
ͷௐʹ͏ w ֶशࡁΈࣝͷ ࣄ࣮ 'BDUVBM ͷ ௐ3"(Λ͏
3"(ͷΞϓϩʔν ΞϓϦέʔγϣϯ w --.ͦͷͷΛνϡʔχ ϯά͢ΔͷͰͳ͘ɺݕࡧ ͨ͠֎෦ࣝΛϓϩϯϓ τʹຒΊࠐΉ w ݕࡧओʹϕΫτϧ%# w
3"(ख๏Ͱ͋Γඪ४Խ ͞Εͨن֨Ͱͳ͍ --. --.ͷ"1*ϦΫΤετͱϨεϙϯε --.ΞϓϦجૅ ϕΫτϧ σʔλϕʔε Ϣʔβʔ Chroma, Milvus, pgvector, Pinecone, Weaviate, etc... ֎෦ࣝΛऔΓࠐΉ 3"(࣮ݱ
3"(ͱπʔϧݺͼग़͠ ֎෦πʔϧ "1*ݺͼग़͠ 5PPM6TF ΤʔδΣϯτߏஙڧԽ ΞϓϦέʔγϣϯ w --.ࣝʹͳ͍ใ͕ඞཁ ͳΒϕΫτϧσʔλϕʔε ͍߹ͤ݁ՌΛՃຯͯ͠
--.ϓϩϯϓςΟϯά ͍ΘΏΔٛͷ3"( w --.ͷϨεϙϯεʹԠ͡ɺ ֎෦πʔϧݺͼग़͠ͷ ΈΛೖΕΔ 3"(ͱผ࣠ --. --.ͷ"1*ϦΫΤετͱϨεϙϯε --.ΞϓϦجૅ ϕΫτϧ σʔλϕʔε ֎෦πʔϧ ίʔυ࣮ߦ Ϣʔβʔ Chroma, Milvus, pgvector, Pinecone, Weaviate, etc... ֎෦ࣝΛऔΓࠐΉ 3"(࣮ݱ
w 3"(ख๏Λࢦ͢ͷͰ͋Γɺϓϥοτ ϑΥʔϜΛލ͍ͩڞ௨ͷنͳ͍ w 1ZUIPOͳΒ-BOH$IBJO4FNBOUJD,FSOFM ͳͲ3"(࣮ݱͷͨΊͷϑϨʔϜϫʔΫ͕͋Δ w 3VCZ3"(ϑϨʔϜϫʔΫ-BOHDIBJOSC͕ 3VCZ$POG5BJXBOͰհ͞Ε͍ͯΔ 3"(࣮ݱͷϑϨʔϜϫʔΫ
w 3"(ΤʔδΣϯτߏஙΛ࣮ݱ͢ΔͨΊͷɺ --.ͷ"1*ΫϥΠΞϯτɺϕΫτϧσʔλ ϕʔε౷߹ɺπʔϧݺͼग़͠ͳͲΛࠝแ w ͦΕͧΕͷ"1*ΛநԽͨ͠ϓϥΨϒϧͳ ߏʹͳ͍ͬͯΔ w ຊՈ-BOH$IBJOͱൺͯɺ·͍ͩΖ͍Ζෆ -BOHDIBJOSC
"OESFJ#POEBSFW࡞
w -BOHDIBJO--."OUISPQJD -BOHDIBJO--.0QFO"*ͳͲ --.ʹԠͨ͡ΫϥΠΞϯτͷϥούʔΛ࣋ͭ w -BOHDIBJO--.#BTFΛܧঝ͠ɺMMNDIBU MMNTVNNBSJ[FͳͲಁաతͳந"1*Λ࣋ͭ --.Λಁաతʹѻ͏"1*Λ࣋ͭ llm
= Langchain::LLM::Anthropic.new( api_key: ENV['ANTHROPIC_API_KEY'] ) # Requires the `anthropic` gem as an LLM client
-BOHDIBJO7FDUPSTFBSDI require 'langchain' require 'chroma-db' chroma = Langchain::Vectorsearch::Chroma.new( url: ::Chroma.connect_host,
index_name: 'ruby40_collection', llm: Langchain::LLM::Ollama.new) response = chroma.ask(question: 'Ruby 4.0ͷRuby Boxͷ࡞ऀʁ') response.chat_completion # => 'tagomoris͞ΜͰ͢ɻ' w --.͕ະͷ֎෦ࣝΛఏڙ͢ΔͨΊɺ ϕΫτϧ%#͔Βҙຯతʹ͍ۙใΛݕࡧ Ruby 4.0.0ϦϦʔεҎલͷ 202511݄7࣌Ͱ࣭
w --.͕֎෦ػೳͱͯ͠ݺͼग़͠அͰ͖Δɺ ͍͔ͭ͘ͷΈࠐΈπʔϧΛαϙʔτ w -BOHDIBJO5PPM # Fetch weather from https://home.openweathermap.org
weather = Langchain::Tool::Weather.new( api_key: ENV['OPEN_WEATHER_API_KEY'] ) # Use `eqn` gem calculator = LangChain::Tool::Calculator.new # Use `safe_ruby` gem interpreter = Langchain::Tool::RubyCodeInterpreter.new
w --.ɺπʔϧͳͲΛΈ߹ΘͤͯϢʔβʔͷ ϓϩϯϓςΟϯάʹԠ͢Δத֩ͷΫϥε -BOHDIBJO"TTJTUBOU require 'langchain' llm = Langchain::LLM::Ollama.new assistant
= Langchain::Assistant.new( llm: llm, tools: [Langchain::Tool::Weather.new(api_key: api_key)] ) assistant.add_message(content: '໌ͷఱؾʁ') messages = assistant.run! messages.each { |message| p message.to_hash[:content] }
w 3"(ϑϨʔϜϫʔΫͰநԽ༷ͨ͠ʑͳ ػೳ"1*͕༻ҙ͞ΕΔ͕ɺෆ༻ͷػೳͳΒ --.ݺͼग़͠ͷ"1*ʹґଘͨ͠ํ͕༰қʁ w ྫ͑ɺ-BOHDIBJO--.0QFO"* SVCZPQFOBJHFNͷϥούʔʹա͗ͳ͍ 3"(ϑϨʔϜϫʔΫͳநԽઆʁ ϑϨʔϜϫʔΫͰ--.ΞϓϦ૾ΛΓɺඞཁͳݸผϥΠϒϥϦΛ͏ͱγϯϓϧʁ
w -BOHDIBJOSCͱൺͯܰྔͳϥΠϒϥϦ w ϕΫτϧσʔλϕʔεʹର͢ΔநԽ"1* ఏڙ͍ͯ͠ͳ͍ w GKPSEMMDCPPUDBNQͰΘΕ͍ͯΔΒ͍͠ ͷͰৄ͘͠(JU)VCΛݟΑ͏ 3VCZ--. DSNOFSVCZ@MMN
chat = RubyLLM.chat chat.ask("What's the best way to learn Ruby?")
w -BOHDIBJOSCɺ--.ΛғΉ3VCZͷϥΠϒ ϥϦϛυϧΣΞΛΔ͖͔͚ͬʹͳΔ w 1ZUIPOͷ-BOH$IBJOʹ͋ΔػೳΛ3VCZͷ -BOHDIBJOSCʹҠ২Ͱ͖ͦ͏ w -BOHDIBJOSCͷίϯτϦϏϡʔγϣϯͷ ϙΠϯτͱͯ͠5PPM֦ॆɺ-$&-αϙʔτ -BOHDIBJOSCʹΑΔ3"(·ͱΊ
LangChain Expression Language
.PEFM$POUFYU1SPUPDPM .$1 NPEFMDPOUFYUQSPUPDPMJP
w .PEFM$POUFYU1SPUPDPMͷུশ w "OUISPQJD͕ࣾࡦఆެ։ɺ-JOVY'PVOEBUJPO ͷ"HFOUJD"*'PVOEBUJPO ""*' ͷدଃ ϓϩτίϧ༷ͰɺϓϥοτϑΥʔϜඇґଘ w ݱࡏɺ͕࠷৽൛Ͱ
υϥϑτ൛ͱͯ࣍͠ظ༷Λࡦఆத .$1ͱʁ
w -BOHVBHF4FSWFS 1SPUPDPM -41 ʹӨڹ Λड͚ͨΞʔΩςΫνϟ w .$1ϗετɺ ΫϥΠΞϯτɺαʔόʔ ͰΔ
w ΫϥΠΞϯτɺαʔόʔ +40/31$ج൫ ͷ.$1Ͱ௨৴͢Δ .$1ͷΞʔΩςΫνϟ IUUQTNPEFMDPOUFYUQSPUPDPMJPTQFDJ fi DBUJPOBSDIJUFDUVSF
.$1ϗετத৺ͷΦʔέετϨʔγϣϯ .$1αʔόʔ MCP on JSON-RPC 2.0 .$1 ΫϥΠΞϯτ .$1ϗετ w
.$1ϗετɺϢʔβʔͱ--. ͱ.$1ΫϥΠΞϯτͷՍ͚ڮ w .$1ϗετઃఆʹج͍ͮͯ .$1αʔόʔΛ--.ʹ͑Δ w .$1ϗετ--.͕.$1αʔ όʔݺͼग़͠Λ͢ΔΑ͏ฦͨ͠Β .$1αʔόʔݺͼग़͠Λ͢Δ w --.͕.$1αʔόʔͷ ݺͼग़͠Λ͢ΔΘ͚Ͱͳ͍ --. --.ͷ"1*ϦΫΤετͱϨεϙϯε ઃఆϑΝΠϧ NDQKTPO READ .$1αʔόʔ .$1 ΫϥΠΞϯτ Ϣʔβʔ αʔόʔઃఆ ։ൃऀతʹԠ͡ MCPαʔόʔΛ࣮
w $POUFYU.$1 w 4FSFOB.$1 w 'JHNB.$1 w 1MBZXSJHIU.$1 εΩϧ൛ͷ1MBZXSJHIU$-*ొ .$1αʔόʔྫ
ແݶʹ͋Δ IUUQTSFHJTUSZNPEFMDPOUFYUQSPUPDPMJPʹొ͞ΕͨݕࡧՄೳͳͷ
w 'BTU.$1 ZKBDRVJOGBTUNDQ w .$13# GVOXBSJPJTJJNDQSC w .$1PO3VCZ
SVCZPOBJNDQ@PO@SVCZ w .$13VCZ4%, NPEFMDPOUFYUQSPUPDPMSVCZTEL 3VCZʹ͓͚Δ.$14%,HFN NPEFMDPOUFYUQSPUPDPMͷ63-͕ѹతͩͬͨͷͰɺͦ͜ʹίϛοτ͍ͯ͠Δ
w 1ZUIPO4%,ͱ5ZQF4DSJQU4%,͕ઌߦ w ݄ݱࡏݸͷެࣜ4%,͕ଘࡏ .$10G fi DJBM4%,T IUUQTNPEFMDPOUFYUQSPUPDPMJPBCPVU IUUQTNPEFMDPOUFYUQSPUPDPMJPEPDTTEL
w 4IPQJGZ͕ࣾͰ࡞͍ͬͯͨHFNΛެࣜͱͯ͠ఏ Ҋͯ͠ެ։͕࢝·ͬͨͬΆ͍ w .$1ͷΨόφϯε 4&1 ͕͏·Ͱͷؒ ɺ4IPQJGZͰϝϯςφϯε͞Ε͍ͯͨ w "UF㶆(ÖSBM
5PQIFS#VMMPDL +POBUIBO)FGOFS ࢲͷਓ͕ϝϯςφʔͱͯ͠׆ಈ͍ͯ͠Δ .$13VCZ4%, Specification Enhancement Proposal
w ެࣜ4%,.$1༷ͷ४ڌ͕ٻΊΒΕΔ w ద߹ςετͷ߹֨ϝϯςφϯε߹͍Ͱ 5JFS ϑϧαϙʔτ 5JFS ϑϧαϙʔτ Λίϛοτϝϯτ
5JFS ࣮ݧత Ͱྨ w ݱࡏ3VCZ4%,5JFS 5IF0G fi DJBM4%, ͭ·Γ.$1ͷ༷ͷΞοϓσʔτʹԠͯ͡ɺ4%,ରԠ͢Δ͜ͱ͕ཁٻ͞ΕΔ IUUQTNPEFMDPOUFYUQSPUPDPMJPDPNNVOJUZTELUJFST
/BUJWFޚࡾՈ w .$1αʔόʔఏڙͷ πʔϧɺϦιʔεɺ ϓϩϯϓτ͕ओཁػೳ w ಛʹπʔϧ൚༻తͳ ػೳͰΫϥΠΞϯτͷ ଟ͕͘αϙʔτ IUUQTNPEFMDPOUFYUQSPUPDPMJPDMJFOUT
IUUQTNPEFMDPOUFYUQSPUPDPMJPBCPVU
ΫϥΠΞϯταʔόʔؒͷ௨৴ w TUEJPͱ4USFBNBCMF)551Λαϙʔτ w TUEJPϩʔΧϧͷ.$1αʔόʔͱͯ͠ଓ w 4USFBNBCMF)551ඞཁʹԠͯ͡44& 4FWFS4FOU&WFOUT ͕ΘΕΔ w
ݱঢ়4USFBNBCMF)551ΤϯτϦϙΠϯτΛ 3BDL3BJMTͰࣗલ࣮͢Δܗࣜ
3VCZͰ.$1Λ࣮͢Δͱʁ w .$1༷ʹԊ࣮͕ͬͨ͞Εͨ.$1ΫϥΠ Ξϯτɺ.$1αʔόʔؒ૬ޓӡ༻Մೳ w ϓϩτίϧ༷ͷಈ͘ιϑτΣΞͱͯ͠ɺ ԿΒ͔ͷݴޠॲཧܥͷ࣮͕ඞཁ w 3VCZͰ࣮͢Ε࣮ͱӡ༻ͷϝϯςφϯ εΛ3VCZͰͰ͖Δ
require 'mcp' server = MCP::Server.new(name: 'example') server.define_tool( name: 'echo', description:
'Echoes back its arguments', input_schema: { properties: { message: {type: 'string'} }, required: ['message'] } ) do |message:| MCP::Tool::Response.new([{ type: 'text', text: "Echo for #{message}" }]) end MCP::Server::Transports::StdioTransport.new(server).open ྫ
w 3"(ख๏Ͱ-BOHDIBJOSC--.ΞϓϦͷ ಠࣗ"1*ͷఏڙϑϨʔϜϫʔΫͱͯ͠࠶ར༻ w .$1ϓϩτίϧ༷Ͱ͋Γ.$1αʔόʔ ن४ڌ.$1ΫϥΠΞϯτԣஅͰ࠶ར༻ w ͍ͣΕ--.݁ՌͷධՁඞཁ͕ͩɺ.$1 খ͘͞࠶ར༻͍͢͠σβΠϯ 3"(WT.$1
"HFOU4LJMMT "HFOU4LJMMT BHFOUTLJMMTJP
w "OUISPQJD͕ࣾఏҊͨ͠Φʔϓϯ༷ w ΤʔδΣϯτͷಛఆͷ࡞ۀखॱΛఆٛ͢Δ ࠶ར༻ՄೳͳϓϩϯϓτςϯϓϨʔτ w ֓ཁͱͳΔ༷ϖʔδͷΈͷܰྔ༷Ͱ $MBVEF$PEF$PEFYͳͲʹͯར༻Մೳ "HFOU4LJMMTͱʁ ݩʑ"HFOUJD$PEJOHؚΊɺ"*׆༻ͷιϑτΣΞ։ൃʹ͍ͭͯͷଧͩͬͨͷͰ
σΟϨΫτϦߏ BOUISPQJDTTLJMMTͷTLJMMDSFBUPSΛͬͨεΩϧ࡞Λ͍ͯ͠ΔΛࣖʹ͢Δ IUUQTBHFOUTLJMMTJPXIBUBSFTLJMMT
.BSLEPXOهड़ EFTDSJQUJPOʮ͍ͭ XIFO ʯൃಈ͢ΔεΩϧ͔Λه͢ BHFOUTLJMMT IUUQTBHFOUTLJMMTJPXIBUBSFTLJMMT
<ิ>ΧελϜεϥογϡίϚϯυ w "HFOU4LJMMTҎલ͔Βଘࡏ͍ͯͨ͠ɺεϥο γϡίϚϯυ͕Ϣʔβʔ͕ಠࣗఆٛͰ͖Δ ΤʔδΣϯτπʔϧͷσϑΝΫτͷΈ w Ϣʔβʔ͕໌ࣔతʹ࣮ߦ͢Δͷ͕εϥογϡ ίϚϯυͰ͋ΓɺΤʔδΣϯτ͕ࣗతʹݺ ͼग़͢ͷ͕εΩϧ
ͷྫ ηϧϑϨϏϡʔXJUI"* w $MBVEF$PEF͔Β$PEFYΛݺͼग़ͯ͠ ϩʔΧϧͰͷΫϩεϨϏϡʔΛ͍ͯ͠Δ w ࣭Λ্͛ΔͨΊੜ"*Λ͢Δ w ࠷ۙͩͱ$MBVEF$PEFʹ/simplify͕ ͕ೖͬͨͷͰͦΕϩʔΧϧͰֻ͚߹ΘͤΔ
IUUQTLPJDIBUFOBCMPHDPNFOUSZNZDMBVEFDPEFXPSL fl PXBOETFUVQ
"HFOU4LJMMTͱͷӡ༻ॏෳʁ w dDMBVEFDPNNBOETͱdDMBVEFTLJMMTʹ ಉ͡ϓϩϯϓτΛஔ͘ͷ͖ͼ͍͠ w $MBVEF$PEFͰεϥογϡίϚϯυಉ༷ʹ TLJMMOBNFͰ໌ࣔతʹεΩϧݺͼग़͠Ͱ͖Δ w ࠓޙTLJMMTʹد͍ͤͯ͘ͷ͕ྑ͍͔ʁ $PEFYΧελϜϓϩϯϓτඇਪͰɺεΩϧΛ͏Α͏ʹެࣜจॻʹ໌ࣔ͞Εͨ
IUUQTEFWFMPQFSTPQFOBJDPNDPEFYDVTUPNQSPNQUT
3BJMTͱ͍͏$P$ϑϨʔϜϫʔΫ w ಈతܕ͚ݴޠͷ3VCZੜ"*ͱͷ૬ੑ͕ ྑ͍ͱͷNBNFUUFS͞ΜͷݚڀϨϙʔτ͋Γ w 3BJMTͷ$P$ͱ--.ͷࣄલֶशʹΑΔਪͱ ૬ੑ͕ྑ͍B@NBUTVEB͞Μͷܦݧଇ͋Γ w 3VCZ3BJMTʹର͢ΔଐਓੑΛ࣋ͬͨεΩϧΛ ެ։͢ΔͱίϛϡχςΟʹؐݩʹͳΔʁ
IUUQT[FOOEFWNBNFUUFSBSUJDMFTFFD $POWFOUJPOPWFS$PO fi HVSBUJPO
IUUQTSVCZPOSBJMTPSH
3VCZY--.ͷՄೳੑ
w ࣮ࡍͷͱ͜Ζɺ1ZUIPO͕ઌߦ͍ͯ͠Δ w 3"(ʹؔͯ͠ख๏ʹա͗ͳ͍ͨΊɺ ʮ΅͕͘ߟ͑ͨ࠷ڧͷ3"(ϑϨʔϜϫʔΫʯ 3VCZ൛͕ొ͢Δ༨͋Δ͔͠Εͳ͍ w .$1༷४ڌͷ4%,࣮ͷͨΊ༷ཧղ ͱෆ͍ͯ͠Δ3VCZ4%,։ൃΛਐΊ͍ͯ͘ 3VCZͷ3"(ͱ.$1ޙ͍
w 3VCZΤίγεςϜͷ͕Γʹ 3VCZॲཧܥΠϯετʔϧ͕ॏཁ w .$1αʔόʔ֤ݴޠͰ࣮Մ w 3VCZ.$1αʔόʔ͕͕Δ ͱ͍͏͜ͱɺ࣮ߦڥʹ3VCZ ॲཧܥ͕ೖΔػձ͕૿͑ɺ3VCZ ͷଟ༷ੑͷ͕Γʹܨ͕Δʂʁ
.$1αʔόʔ࣮ݴޠؒϨʔεʁ IUUQTHJUIVCDPNNPEFMDPOUFYUQSPUPDPMTFSWFST IUUQTNPEFMDPOUFYUQSPUPDPMJPBCPVU
.$13VCZ4%,ͷΞϓϦࣄྫٻΉ w 3VCZք۾Ͱͷ.$1ͷར༻ࣄྫͱͯ͠ɺ $MBVEF$PEF$VSTPSͳͲͷπʔϧΛ.$1 ϗετͱׂ͕ͨ͠Γ߹͍ͱͯ͠ଟ͍ʁ w 3BJMTΞϓϦΛ.$1ϗετͱͨ͠--.ΞϓϦ ͔Β.$1αʔόʔΛͬͨࣄྫՉฉ Ҏલ0QFO"*͔Β$IBU(15"QQT4%,ج൫͕.$1ͱ͍͏ൃද͋Γܹྲྀͷ࠷த IUUQTPQFOBJDPNJOEFYJOUSPEVDJOHBQQTJODIBUHQU
w 3VCZPO3BJMTʹΑΔΞϓϦέʔγϣϯͷ --.׆༻ͷΈࠐΈ3VCZͰͰ͖ΔΑ w --.पลʹ044ͰղܾͰ͖Δ͜ͱ͕ࢁ ͋ΓɺύΠΦχΞʹͳΔνϟϯεʂʁ w ͜Μͳ--.׆༻Ͱ͖ͳ͍͔ͳʁͱࢥͬͨΒ 1ZUIPOઌഐ͔ΒֶΜͰΈΔͷͻͱͭ ·ͱΊ
w --.ςΩετੜΤϯδϯͱ͍͏πʔϧ w --.ͷΈΛΔ͜ͱ--.Λͬͨ ΤϯδχΞϦϯάεΩϧͷ্ʹඞਢ --.ͦͷͷΛΔ ͓͢͢Ί
3VCZY"*
None