stellify-mcp について
Stellify MCP Server は AI アシスタントを Stellify プロジェクトに接続し、Laravel と Vue.js のアプリを段階的に開発するための MCP サーバーです。会話を通じて開発するチーム向けで、コードを構造化して保存し、ファイル全体ではなく部分的に編集できます。
主な機能
- 01プロジェクトのディレクトリとコードファイル作成
- 02メソッドシグネチャの追加と本体の解析
- 03コードを構造化ステートメントに解析
- 04HTML を Stellify 要素に変換
- 05プロジェクトのファイル、メソッド、ルート検索
活用シーン
- 01Laravel のコントローラーやモデルの段階的な作成
- 02Vue コンポーネントの構築と HTML テンプレート変換
- 03既存コードの検索とメソッド実装の追加
MCP 対応
ホスト型 HTTP とローカル MCP サーバーの接続方式を提供し、Stellify プロジェクトのファイル、コード、ルート、要素を操作するツールを MCP クライアントに公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.stellisoft.com/mcpclaude mcp add --transport http mattstellisoft-stellify https://api.stellisoft.com/mcp{"mcpServers":{"mattstellisoft-stellify":{"type":"http","url":"https://api.stellisoft.com/mcp"}}}Cursor で開く{"servers":{"mattstellisoft-stellify":{"type":"http","url":"https://api.stellisoft.com/mcp"}}}VS Code で開く{"mcpServers":{"mattstellisoft-stellify":{"type":"http","url":"https://api.stellisoft.com/mcp"}}}{"mcpServers":{"mattstellisoft-stellify":{"serverUrl":"https://api.stellisoft.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Stellify MCP サーバー
Stellify 用の Model Context Protocol(MCP)サーバーです。Stellify は AI ネイティブなコード生成プラットフォームです。
これは何ですか?
この MCP サーバーを使うと、AI アシスタント(Claude Desktop など)が Stellify プロジェクトを操作し、Laravel および Vue.js アプリケーションを段階的に構築できます。コードファイル全体を一度に生成する代わりに、AI は次のことができます。
- ファイル構造(クラス、コントローラー、モデル、ミドルウェア、Vue コンポーネント)を作成する
- 型ヒント付きのメソッドシグネチャを追加する
- PHP/JavaScript コードを構造化 JSON に(ステートメント単位で)解析する
- HTML を 1 回の操作で Stellify 要素に変換する
- プロジェクト内の既存コードを検索する
- グローバルライブラリから再利用可能なコードをインストールする
- 自然な会話を通じてアプリケーションを構築する
クイックスタート — ホステッドサーバー(推奨)
最も簡単な接続方法は、https://api.stellisoft.com/mcp のホステッドサーバーを利用することです。インストールも、Node.js も、API トークンも不要です。MCP クライアントがブラウザーウィンドウを開き、Stellify アカウントでサインインしてアクセスを承認します(OAuth)。
Claude(ウェブ版またはデスクトップ版): Stellify は Claude コネクターのディレクトリに掲載されています。Settings → Connectors に移動して Stellify を見つけ、Connect をクリックしてください。または、Add custom connector を選択し、https://api.stellisoft.com/mcp を貼り付けてください。
Claude Code:
claude mcp add --transport http stellify https://api.stellisoft.com/mcp
Cursor(.cursor/mcp.json):
{
"mcpServers": {
"stellify": { "url": "https://api.stellisoft.com/mcp" }
}
}
VS Code(.vscode/mcp.json):
{
"servers": {
"stellify": { "type": "http", "url": "https://api.stellisoft.com/mcp" }
}
}
Windsurf(~/.codeium/windsurf/mcp_config.json):
{
"mcpServers": {
"stellify": { "serverUrl": "https://api.stellisoft.com/mcp" }
}
}
ローカルインストール(npm 版)
サーバーをローカルで実行しますか? npm パッケージは同じプロトコルを使用して同じプラットフォーム API に接続し、OAuth の代わりに API トークンで認証します。
前提条件
- Node.js 18 以降
- Stellify アカウント:stellisoft.com で登録してください
- Claude Desktop(またはその他の MCP 対応 AI クライアント)
インストール
npm でグローバルインストールします。
npm install -g @stellisoft/stellify-mcp
設定
-
Stellify API トークンを取得します。
- Stellify にログインします
- Settings → API Tokens に移動します
- 「Create New Token」をクリックします
- トークンをコピーします
-
Claude Desktop を設定します。
Claude Desktop の設定ファイルを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
Stellify MCP サーバーを追加します。
{ "mcpServers": { "stellify": { "command": "stellify-mcp", "env": { "STELLIFY_API_URL": "https://stellisoft.com/api/v1", "STELLIFY_API_TOKEN": "your-token-here" } } } } - macOS:
-
Claude Desktop を再起動します
これで完了です。Stellify のツールが Claude Desktop で利用できるようになります。
使い方
設定が完了したら、Claude と自然に会話しながらアプリケーションを構築できます。
会話の例
新しいコントローラーを作成する:
"Create a UserController in my Stellify project"
メソッドを追加する:
"Add a method called 'store' that takes a Request parameter and returns a JsonResponse"
メソッドのロジックを実装する:
"Add this implementation to the store method:
$user = User::create($request->validated());
return response()->json($user, 201);"
Vue コンポーネントを構築する:
"Create a Counter component with an increment button"
HTML を要素に変換する:
"Convert this HTML to Stellify elements:
<div class='container'><h1>Hello</h1><button>Click me</button></div>"
コードベースを検索する:
"Search for all controller files in my project"
"Find methods related to authentication"
利用可能なツール
プロジェクトとディレクトリのツール
get_project
認証済みユーザーのアクティブな Stellify プロジェクトを取得します。他の操作を行う前に、必ず最初に呼び出してください。
パラメーター: なし
戻り値:
uuid:プロジェクトの UUID(ほとんどの操作で必要)name:プロジェクト名directories:既存のディレクトリの{uuid, name}の配列
get_directory
UUID でディレクトリを取得し、その内容を確認します。
パラメーター:
uuid(必須):ディレクトリの UUID
create_directory
ファイルを整理するための新しいディレクトリを作成します。
パラメーター:
name(必須):ディレクトリ名(例:「js」、「css」、「components」)
ファイルのツール
create_file
Stellify プロジェクトに新しいファイルを作成します。空のファイルシェルを作成するもので、メソッド、ステートメント、テンプレートはまだ含まれません。
パラメーター:
directory(必須):ディレクトリの UUID(get_projectのdirectories配列から取得)name(必須):拡張子を除いたファイル名(例:「Counter」、「UserController」)type(必須):ファイルの種類。「class」、「model」、「controller」、「middleware」、「js」のいずれかextension(任意):ファイル拡張子。Vue コンポーネントには「vue」を使用します。namespace(任意):PHP 名前空間(例:「App\Services\」)。PHP ファイルのみ対象です。includes(任意):インポートする完全修飾クラス名の配列(例:["App\\Models\\User", "Illuminate\\Http\\Request"])。Stellify はこれらをファイル UUID に解決し、必要に応じて Laravel API または vendor ディレクトリから取得します。
ディレクトリの選択: ファイルの用途に合ったディレクトリを選択します。ディレクトリが存在しない場合は、まず create_directory で作成してください。
| ファイルの種類 | ディレクトリ | 名前空間 |
|---|---|---|
| コントローラー | controllers | App\Http\Controllers\ |
| モデル | models | App\Models\ |
| サービス | services | App\Services\ |
| ミドルウェア | middleware | App\Http\Middleware\ |
| Vue/JS | js | N/A |
ワークフローの例:
create_file→ 空のファイルシェルを作成し、ファイル UUID を返しますcreate_statement+add_statement_code→ 変数やインポートを追加しますcreate_method+add_method_body→ 関数を追加しますhtml_to_elements→ テンプレート要素を作成します(Vue の場合)save_file→ すべての UUID を紐付けてファイルを完成させます
依存関係の自動作成(auto_create_dependencies: true の場合):
次のようなコードを含むファイルを作成すると:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$user = User::create($request->validated());
return response()->json($user);
}
}
Stellify は次の処理を行います:
useステートメントを解析して依存関係(User、Request、Socialite)を特定します- Application DB でフレームワーククラスを確認し、キャッシュ済みのクラスを検索します
- Laravel のコアクラスについては、api.laravel.com から取得します
- ベンダーパッケージ(Socialite、Spatie など)については、
vendor/ディレクトリから読み込みます - 不足している App クラスを作成します →
Userモデルファイルを作成します - すべての依存関係 UUID を含めて、ファイルの
includes配列を紐付けます
対応している取得元:
- Laravel API - コアの
Illuminate\*クラスを api.laravel.com から取得します - ベンダーパッケージ -
Laravel\Socialite\*、Laravel\Cashier\*、Spatie\*、Livewire\*などを、PHP-Parser を使用してvendor/ディレクトリから直接読み込みます
レスポンスには、作成または解決された内容と取得元を示す dependencies レポートが含まれます。
get_file
UUID を指定して、すべてのメタデータ、メソッド、ステートメントとともにファイルを取得します。
パラメーター:
uuid(必須):ファイルの UUID
save_file
完全な設定でファイルを保存または更新します。create_file の後にファイルを完成させるために使用します。
パラメーター:
uuid(必須):ファイルの UUIDname(必須):ファイル名(拡張子を除く)type(必須):ファイルの種類(「js」、「class」、「controller」、「model」、「middleware」)extension(任意):ファイル拡張子(Vue SFC には「vue」)template(任意):Vue の<template>セクションに含めるルート要素 UUID の配列data(任意):メソッド UUID のみの配列(関数)statements(任意):ステートメント UUID の配列(インポート、変数、参照)includes(任意):インポートするファイル UUID の配列
重要: data はメソッド UUID のみ、statements はステートメント UUID(メソッド外のコード)です。
search_files
プロジェクト内のファイルを名前または種類で検索します。
パラメーター:
name(任意):検索するファイル名のパターンtype(任意):ファイルの種類によるフィルター
メソッドツール
create_method
ファイルにメソッドシグネチャを作成します(実装は含みません)。
パラメーター:
file(必須):メソッドを追加するファイルの UUIDname(必須):メソッド名(例:「increment」、「store」、「handleClick」)visibility(任意):「public」、「protected」、または「private」(PHP のみ、既定値:「public」)is_static(任意):メソッドが静的かどうか(PHP のみ、既定値:false)returnType(任意):戻り値の型(例:「int」、「string」、「void」)parameters(任意):{name, type}オブジェクトの配列
add_method_body
コードを解析し、メソッド本体に追加します。Stellify はコードを構造化された JSON ステートメントに解析します。
パラメーター:
file_uuid(必須):メソッドを含むファイルの UUIDmethod_uuid(必須):コードを追加するメソッドの UUIDcode(必須):メソッド本体のコード(ステートメントのみ。関数宣言は含めません)
例:
code: "return $a + $b;"
search_methods
メソッド名または特定のファイルを指定して、プロジェクト内のメソッドを検索します。
パラメーター:
name(任意):検索するメソッド名(ワイルドカードをサポート)file_uuid(任意):結果を特定のファイルに絞り込みます
ステートメントツール
create_statement
ファイルに空のステートメントを作成します。これは 2 ステップ中の 1 ステップ目です。次に add_statement_code を呼び出す必要があります。
パラメーター:
file(任意):ステートメントを追加するファイルの UUIDmethod(任意):ステートメントを追加するメソッドの UUID(メソッド本体のステートメント用)
用途:
- PHP:クラスプロパティ、use ステートメント、定数
- JS/Vue:変数宣言、インポート、リアクティブ参照
add_statement_code
既存のステートメントにコードを追加します。これは 2 ステップ中の 2 ステップ目です。create_statement の後に呼び出してください。
パラメーター:
file_uuid(必須):ステートメントを含むファイルの UUIDstatement_uuid(必須):コードを追加するステートメントの UUIDcode(必須):追加するコード
例:
code: "use Illuminate\\Http\\Request;"
code: "const count = ref(0);"
code: "import { ref } from 'vue';"
get_statement
句(コードトークン)を含むステートメントを UUID で取得します。
パラメーター:
uuid(必須):ステートメントの UUID
ルートツール
create_route
Stellify プロジェクトに新しいルート/ページを作成します。
パラメーター:
project_id(必須):Stellify プロジェクトの UUIDname(必須):ルート/ページ名(例:「Home」、「Counter」、「About」)path(必須):URL パス(例:「/」、「/counter」、「/about」)method(必須):HTTP メソッド(「GET」、「POST」、「PUT」、「DELETE」、「PATCH」)type(任意):ルートの種類。ページの場合は「web」、API エンドポイントの場合は「api」(既定値:「web」)data(任意):追加のルートデータ
get_route
ルート/ページを UUID で取得します。
パラメーター:
uuid(必須):ルートの UUID
search_routes
名前でプロジェクト内のルート/ページを検索します。
パラメーター:
search(任意):ルート名との照合に使う検索語type(任意):ルートの種類で絞り込みます(「web」または「api」)per_page(任意):1 ページあたりの結果数(既定値:10)
ビューと Blade テンプレート
Stellify は Blade ビューをファイルではなく要素として保存します。ルート要素の name フィールドがビュー名に対応します。
name="notes.index"を持つ要素 →view('notes.index', $data)name="layouts.app"を持つ要素 →@extends('layouts.app')name="components.card"を持つ要素 →<x-card>
html_to_elements で作成した後、update_element を使ってルート要素に name を設定します。
再利用可能なテンプレートの慣例: レイアウト、コンポーネント、パーシャルをテンプレートルート(例:/template/app-layout、/template/card)に紐付けると、整理して編集しやすくなります。
要素ツール(UI コンポーネント)
create_element
新しい UI 要素を作成します。ルート要素の場合は page(ルート UUID)、子要素の場合は parent(要素 UUID)のいずれかを指定してください。
パラメーター:
type(必須):要素の種類。次のいずれかです。- HTML5:
s-wrapper、s-input、s-form、s-svg、s-shape、s-media、s-iframe - コンポーネント:
s-transition、s-freestyle、s-motion - Blade:
s-directive - Shadcn/ui:
s-chart、s-table、s-combobox、s-accordion、s-calendar、s-contiguous
- HTML5:
page(任意):ページ/ルートの UUID(ルート要素の場合)parent(任意):親要素の UUID(子要素の場合)
Blade の条件分岐に s-directive を使用する場合:
s-directive 要素は Blade ディレクティブ(@if、@foreach、@endif など)を出力します。これらは兄弟要素であり、子要素を囲みません。コンテンツを条件付きでレンダリングするには、次の手順に従います。
- 開始ディレクティブ(例:
@if(...))を記述したs-directive要素を作成します - コンテンツ要素を次の兄弟要素として作成します
- 終了ディレクティブ(例:
@endif)を記述した別のs-directive要素を作成します
例 — 画像を条件付きで表示する場合:
// 1. Create statement for @if
create_statement_with_code({
file: "<file-uuid>",
code: "@if($item->featured_image)"
})
// 2. Create opening directive element and set its statement
create_element({ type: "s-directive", page: "<route-uuid>" })
update_element({ uuid: "<if-directive-uuid>", data: { "statement": "<if-statement-uuid>" } })
// 3. Create the image as the next sibling
html_to_elements({ page: "<route-uuid>", elements: "<img class=\"w-full\" />" })
// Then update with dynamic src:
update_element({ uuid: "<img-uuid>", data: { "srcField": "featured_image" } })
// 4. Create statement for @endif
create_statement_with_code({ file: "<file-uuid>", code: "@endif" })
// 5. Create closing directive element
create_element({ type: "s-directive", page: "<route-uuid>" })
update_element({ uuid: "<endif-directive-uuid>", data: { "statement": "<endif-statement-uuid>" } })
3 つの要素は、兄弟要素として順番にレンダリングされます。
@if($item->featured_image)
<img class="w-full" src="{{ $item->featured_image }}" />
@endif
ループに s-directive を使用する場合:
// 1. Create @foreach directive
create_statement_with_code({ file: "<file-uuid>", code: "@foreach($posts as $item)" })
create_element({ type: "s-directive", page: "<route-uuid>" })
update_element({ uuid: "<foreach-uuid>", data: { "statement": "<foreach-statement-uuid>" } })
// 2. Create loop content (article with dynamic fields)
html_to_elements({ page: "<route-uuid>", elements: "<article><h2></h2><p></p></article>" })
// Update elements to use loop item fields:
update_element({ uuid: "<h2-uuid>", data: { "textField": "title" } }) // → {{ $item->title }}
update_element({ uuid: "<p-uuid>", data: { "textField": "excerpt" } }) // → {{ $item->excerpt }}
// 3. Create @endforeach directive
create_statement_with_code({ file: "<file-uuid>", code: "@endforeach" })
create_element({ type: "s-directive", page: "<route-uuid>" })
update_element({ uuid: "<endforeach-uuid>", data: { "statement": "<endforeach-statement-uuid>" } })
ループ項目の属性:
@foreach ループ内では、要素に次の属性を設定して $item を参照します。
textField: "fieldName"→{{ $item->fieldName }}を出力しますhrefField: "fieldName"→href="{{ $item->fieldName }}"を出力しますsrcField: "fieldName"→src="{{ $item->fieldName }}"を出力しますhrefExpression: "{{ route('posts.show', $item->slug) }}"→ 複雑な式に使用しますsrcExpression、altExpression→ ほかの属性にも同じ形式で使用します
update_element
既存の UI 要素を更新します。
パラメーター:
uuid(必須):更新する要素の UUIDdata(必須):HTML 属性と Stellify フィールドを含むオブジェクト
標準 HTML 属性: placeholder、href、src、type など
Stellify フィールド:
name:エディター上での要素名type:要素の種類locked:編集を禁止するかどうか(ブール値)tag:HTML タグ(div、input、button など)classes:CSS クラスの配列["class1", "class2"]text:静的なテキストコンテンツstatements:動的な Blade コンテンツに使用するステートメント UUID の配列
ループ項目のフィールド(@foreach ループ内の要素に使用し、$item を参照します):
textField:フィールド名 →{{ $item->fieldName }}を出力しますhrefField:フィールド名 →href="{{ $item->fieldName }}"を出力しますsrcField:フィールド名 →src="{{ $item->fieldName }}"を出力します
式属性(複雑な Blade 式に使用します):
hrefExpression:href 用の完全な Blade 式(例:"{{ route('posts.show', $item->slug) }}")srcExpression:src 用の完全な Blade 式altExpression:alt 用の完全な Blade 式
イベントハンドラー(値にメソッド UUID を設定します):
click:@clicksubmit:@submitchange:@changeinput:@inputfocus:@focusblur:@blurkeydown:@keydownkeyup:@keyupmouseenter:@mouseentermouseleave:@mouseleave
get_element
UUID で単一の要素を取得します。
パラメーター:
uuid(必須):要素の UUID
get_element_tree
要素とすべての子孫要素を、階層ツリー構造で取得します。
パラメーター:
uuid(必須):ルート要素の UUID
delete_element
要素とそのすべての子要素を削除します(CASCADE)。
パラメーター:
uuid(必須):削除する要素の UUID
search_elements
プロジェクト内の要素を検索します。
パラメーター:
search(任意):要素名、種類、またはコンテンツに一致させる検索クエリtype(任意):要素の種類で絞り込みますinclude_metadata(任意):追加のメタデータを含めます(デフォルト:false)per_page(任意):1 ページあたりの結果数。1〜100(デフォルト:20)
html_to_elements
HTML を Stellify 要素に一度の操作で変換します。インターフェースを構築する最速の方法です!
パラメーター:
elements(必須):変換する HTML 文字列page(任意):要素を紐付けるルート UUID。Vue コンポーネントの場合は省略します。selection(任意):紐付け先の親要素 UUID(pageの代替)file(任意):Vue コンポーネントのファイル UUID。これを指定すると、@click ハンドラーがメソッド UUID に自動的に紐付けられます。test(任意):true の場合、要素を作成せずに構造を返します。
⚠️ 重要:複数のルート要素
複数のルートレベル要素(例:<header>、<main>、<footer>)を含む HTML を渡すと、ルートに routeParent 経由で紐付けられるのは最初のルート要素のみです。それ以外の要素は作成されますが、孤立し(ルートに紐付けられず)、残ります。
誤った方法(要素が孤立する原因になります):
html_to_elements(page: routeUUID, elements: "<header>...</header><main>...</main><footer>...</footer>")
// Result: Only <header> is attached to the route. <main> and <footer> are orphaned!
正しい方法(ルート要素ごとに個別に呼び出します):
// Call 1: Header
html_to_elements(page: routeUUID, elements: "<header>...</header>")
// Call 2: Main content
html_to_elements(page: routeUUID, elements: "<main>...</main>")
// Call 3: Footer
html_to_elements(page: routeUUID, elements: "<footer>...</footer>")
機能:
- HTML 構造を解析します
- 適切なネストで要素をすべて作成します
- 属性、クラス、テキストコンテンツを保持します
- Vue のバインディング(
{{ variable }})を自動検出し、リンクされたステートメントを作成します save_fileのテンプレート配列で使用する要素 UUID を返します
要素タイプの対応関係:
button、input、textarea、select→s-inputdiv、span、p、sectionなど →s-wrapperform→s-formimg、video、audio→s-media
グローバルライブラリツール
list_globals
Application データベース内のすべてのグローバルファイルを一覧表示します。グローバルファイルは、テナントプロジェクトにインストールできる再利用可能な、厳選されたコードです。
パラメーター: なし
get_global
メソッド、ステートメント、句をすべて含むグローバルファイルを取得します。
パラメーター:
uuid(必須):グローバルファイルの UUID
install_global
Application データベースのグローバルファイルをテナントプロジェクトにインストールします。
パラメーター:
file_uuid(必須):インストールするグローバルファイルの UUIDdirectory_uuid(必須):インストール先ディレクトリの UUID
search_global_methods
Application データベース内のメソッド(グローバル/フレームワークメソッド)を検索します。
パラメーター:
query(必須):名前でメソッドを検索するためのクエリ
モジュールツール
モジュールは、関連するグローバルファイルをまとめた名前付きのコレクションで、一括でインストールできます。
list_modules
利用可能なすべてのモジュールを一覧表示します。
パラメーター: なし
get_module
ファイルをすべて含むモジュールを取得します。
パラメーター:
uuid(必須):モジュールの UUID
create_module
関連するグローバルファイルをまとめる新しいモジュールを作成します。
パラメーター:
name(必須):モジュールの一意の名前(例:"laravel-sanctum-auth")description(任意):モジュールが提供する内容の説明version(任意):バージョン文字列(デフォルト:"1.0.0")tags(任意):分類用のタグ(例:["auth", "api", "sanctum"])
add_file_to_module
グローバルファイルをモジュールに追加します。
パラメーター:
module_uuid(必須):モジュールの UUIDfile_uuid(必須):追加するグローバルファイルの UUIDorder(任意):インストール順序(指定しない場合は自動で増加します)
install_module
モジュール内のすべてのファイルをテナントプロジェクトにインストールします。
パラメーター:
module_uuid(必須):インストールするモジュールの UUIDdirectory_uuid(必須):ファイルのインストール先ディレクトリの UUID
Stellify の仕組み
Stellify は、アプリケーションのコードをテキストファイルではなく、データベースに構造化された JSONとして保存します。このアーキテクチャにより、次のことが可能になります。
- ピンポイントの精度: AI はほかのコードに触れずに、特定のメソッドを変更できます
- コードベースをデータのように検索: 特定のクラスを使用するすべてのメソッドを検索できます
- 即時リファクタリング: アプリケーション全体でメソッド名を瞬時に変更できます
- ステートメント単位のバージョン管理: 個々のコードステートメントの変更を追跡できます
- AI ネイティブな開発: 既存のコードを壊す心配なく、AI にきめ細かなアクセスを提供できます
- 依存関係の自動解決: フレームワークのクラスは Laravel API ドキュメントから自動的に取得されます
この MCP サーバーを通じて Stellify でビルドすると、コードは構造化データに解析され、デプロイ時に実行可能なコードとして組み立て直されます。
依存関係の解決
auto_create_dependencies を使用すると、Stellify は次の順序で依存関係を解決します。
- テナントデータベース - クラスがプロジェクトに存在するか確認します
- アプリケーションデータベース - 定義済みクラスのグローバルライブラリを確認します
- Laravel API ドキュメント - コアの
Illuminate\*クラスについては、api.laravel.com から取得します - Vendor ディレクトリ - インストール済みパッケージについては、
vendor/から直接読み込みます
サポート対象のパッケージソース
| ソース | 名前空間 | 方法 |
|---|---|---|
| Laravel API | Illuminate\* | api.laravel.com から取得します |
| Vendor | Laravel\Socialite\* | vendor/laravel/socialite から読み込みます |
| Vendor | Laravel\Cashier\* | vendor/laravel/cashier から読み込みます |
| Vendor | Laravel\Sanctum\* | vendor/laravel/sanctum から読み込みます |
| Vendor | Laravel\Passport\* | vendor/laravel/passport から読み込みます |
| Vendor | Spatie\* | vendor/spatie/* パッケージから読み込みます |
| Vendor | Livewire\* | vendor/livewire/livewire から読み込みます |
| Vendor | Inertia\* | vendor/inertiajs/inertia-laravel から読み込みます |
Vendor パッケージについては、Stellify は PHP-Parser を使用して、インストール済みパッケージの実際のメソッドシグネチャを抽出します。これにより、使用中の依存関係に即した正確さが保証されます。
コード構造
Directory
└── File
└── Method
├── Parameters (Clauses)
└── Statements
└── Clauses / Language Tokens
コードは次の要素に分解されます。
- ディレクトリ:ファイルを整理するためのコンテナー
- ファイル:メソッドとファイルのメタデータを含みます
- メソッド:パラメーターと本体のステートメントを持つ関数
- ステートメント:コードの単一行または単一のステートメント
- 節:末端ノード(変数、文字列、数値など)
- 言語トークン:システム定義のキーワードと記号(再利用可能)
ワークフロー
PHP コントローラーのワークフロー
get_project→ ディレクトリの UUID を検索create_file→ type='controller', name='UserController'create_method→ name='store', parameters=[{name:'request', type:'Request'}]add_method_body→ code='return response()->json($request->all());'
Vue コンポーネントのワークフロー
get_project→ 'js' ディレクトリの UUID を検索create_file→ js ディレクトリ内に type='js', extension='vue' を指定- インポートとデータのステートメントを作成します。
create_statement+add_statement_code:"import { ref } from 'vue';"create_statement+add_statement_code:"const count = ref(0);"
create_method+add_method_body→ 関数を作成html_to_elements→ テンプレート HTML を要素に変換update_element→ イベントハンドラーを紐付け(click → メソッド UUID)save_file→ 次の値を指定して仕上げます。extension: 'vue'template: [rootElementUuid]data: [methodUuid](METHOD UUID のみ)statements: [importStmtUuid, refStmtUuid](STATEMENT UUID)
開発
ウォッチモード(変更時に自動で再ビルド):
npm run watch
手動ビルド:
npm run build
トラブルシューティング
「STELLIFY_API_TOKEN environment variable is required」
.env ファイルが存在し、API トークンが含まれていることを確認してください。
「Connection refused」または API エラー
- API トークンが有効であることを確認してください
STELLIFY_API_URLが正しいことを確認してください- API に直接アクセスしてテストしてください:
curl -H "Authorization: Bearer YOUR_TOKEN" https://stellisoft.com/api/v1/file/search
Claude Desktop にツールが表示されない
- お使いの OS に適した設定ファイルのパスであることを確認してください
- Stellify API トークンが有効であることを確認してください
- Claude Desktop を完全に再起動してください(ウィンドウを閉じるだけでなく、終了してください)
- Claude Desktop のログでエラーメッセージを確認してください
ビルド中の TypeScript エラー
rm -rf node_modules package-lock.json
npm install
npm run build
インストールの問題
# Clear npm cache and reinstall
npm cache clean --force
npm uninstall -g @stellisoft/stellify-mcp
npm install -g @stellisoft/stellify-mcp
アーキテクチャ
Claude Desktop (AI)
↓ (stdio)
Stellify MCP Server (Node.js)
↓ (HTTPS)
Stellify API (Laravel)
↓
Database (Structured Code)
MCP サーバーは、次の役割を担う薄いクライアントです。
- Claude にツールを公開します
- ツール呼び出しを API リクエストに変換します
- 書式設定されたレスポンスを返します
コントリビューション
コントリビューションを歓迎します!コントリビューションガイドラインをご確認のうえ、プルリクエストをぜひお送りください。
サポート
問題や質問がある場合:
- GitHub Issues: バグの報告または機能のリクエスト
- メール: [email protected]
- ドキュメント: https://stellisoft.com/docs
- Discord: コミュニティに参加してください(近日公開)
Stellify について
Stellify は、AI ネイティブなソフトウェア開発の未来を築いています。コードをテキストファイルではなく構造化データとして保存することで、AI と人間がシームレスに協力し、より優れたソフトウェアをより速く開発できる新しいパラダイムを実現します。
詳しくは stellisoft.com をご覧ください。
ライセンス
MIT License - 詳細は LICENSE ファイルをご覧ください。
Stellify チームより、心を込めて開発しました
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。