mcpField
S
stellify-mcp

stellify-mcp

リモート
github.com/Stellify-Software-Ltd開発ツール12 週間前に更新
リポジトリ

stellify-mcp について

Stellify MCP Server は AI アシスタントを Stellify プロジェクトに接続し、Laravel と Vue.js のアプリを段階的に開発するための MCP サーバーです。会話を通じて開発するチーム向けで、コードを構造化して保存し、ファイル全体ではなく部分的に編集できます。

主な機能

  1. 01プロジェクトのディレクトリとコードファイル作成
  2. 02メソッドシグネチャの追加と本体の解析
  3. 03コードを構造化ステートメントに解析
  4. 04HTML を Stellify 要素に変換
  5. 05プロジェクトのファイル、メソッド、ルート検索

活用シーン

  1. 01Laravel のコントローラーやモデルの段階的な作成
  2. 02Vue コンポーネントの構築と HTML テンプレート変換
  3. 03既存コードの検索とメソッド実装の追加

MCP 対応

ホスト型 HTTP とローカル MCP サーバーの接続方式を提供し、Stellify プロジェクトのファイル、コード、ルート、要素を操作するツールを MCP クライアントに公開します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://api.stellisoft.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@stellisoft/stellify-mcp1.0.7

ツール

詳細

Stellify MCP サーバー

npm version smithery badge License: MIT

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
設定
  1. Stellify API トークンを取得します。

    • Stellify にログインします
    • Settings → API Tokens に移動します
    • 「Create New Token」をクリックします
    • トークンをコピーします
  2. 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"
          }
        }
      }
    }
    
  3. 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 で作成してください。

ファイルの種類ディレクトリ名前空間
コントローラーcontrollersApp\Http\Controllers\
モデルmodelsApp\Models\
サービスservicesApp\Services\
ミドルウェアmiddlewareApp\Http\Middleware\
Vue/JSjsN/A

ワークフローの例:

  1. create_file → 空のファイルシェルを作成し、ファイル UUID を返します
  2. create_statement + add_statement_code → 変数やインポートを追加します
  3. create_method + add_method_body → 関数を追加します
  4. html_to_elements → テンプレート要素を作成します(Vue の場合)
  5. 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 は次の処理を行います:

  1. use ステートメントを解析して依存関係(User、Request、Socialite)を特定します
  2. Application DB でフレームワーククラスを確認し、キャッシュ済みのクラスを検索します
  3. Laravel のコアクラスについては、api.laravel.com から取得します
  4. ベンダーパッケージ(Socialite、Spatie など)については、vendor/ ディレクトリから読み込みます
  5. 不足している App クラスを作成します → User モデルファイルを作成します
  6. すべての依存関係 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(必須):ファイルの UUID
  • name(必須):ファイル名(拡張子を除く)
  • 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(必須):メソッドを追加するファイルの UUID
  • name(必須):メソッド名(例:「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(必須):メソッドを含むファイルの UUID
  • method_uuid(必須):コードを追加するメソッドの UUID
  • code(必須):メソッド本体のコード(ステートメントのみ。関数宣言は含めません)

例:

code: "return $a + $b;"

search_methods

メソッド名または特定のファイルを指定して、プロジェクト内のメソッドを検索します。

パラメーター:

  • name(任意):検索するメソッド名(ワイルドカードをサポート)
  • file_uuid(任意):結果を特定のファイルに絞り込みます

ステートメントツール
create_statement

ファイルに空のステートメントを作成します。これは 2 ステップ中の 1 ステップ目です。次に add_statement_code を呼び出す必要があります。

パラメーター:

  • file(任意):ステートメントを追加するファイルの UUID
  • method(任意):ステートメントを追加するメソッドの UUID(メソッド本体のステートメント用)

用途:

  • PHP:クラスプロパティ、use ステートメント、定数
  • JS/Vue:変数宣言、インポート、リアクティブ参照

add_statement_code

既存のステートメントにコードを追加します。これは 2 ステップ中の 2 ステップ目です。create_statement の後に呼び出してください。

パラメーター:

  • file_uuid(必須):ステートメントを含むファイルの UUID
  • statement_uuid(必須):コードを追加するステートメントの UUID
  • code(必須):追加するコード

例:

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 プロジェクトの UUID
  • name(必須):ルート/ページ名(例:「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
  • page(任意):ページ/ルートの UUID(ルート要素の場合)
  • parent(任意):親要素の UUID(子要素の場合)

Blade の条件分岐に s-directive を使用する場合:

s-directive 要素は Blade ディレクティブ(@if、@foreach、@endif など)を出力します。これらは兄弟要素であり、子要素を囲みません。コンテンツを条件付きでレンダリングするには、次の手順に従います。

  1. 開始ディレクティブ(例:@if(...))を記述した s-directive 要素を作成します
  2. コンテンツ要素を次の兄弟要素として作成します
  3. 終了ディレクティブ(例:@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(必須):更新する要素の UUID
  • data(必須):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:@click
  • submit:@submit
  • change:@change
  • input:@input
  • focus:@focus
  • blur:@blur
  • keydown:@keydown
  • keyup:@keyup
  • mouseenter:@mouseenter
  • mouseleave:@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-input
  • div、span、p、section など → s-wrapper
  • form → s-form
  • img、video、audio → s-media

グローバルライブラリツール
list_globals

Application データベース内のすべてのグローバルファイルを一覧表示します。グローバルファイルは、テナントプロジェクトにインストールできる再利用可能な、厳選されたコードです。

パラメーター: なし


get_global

メソッド、ステートメント、句をすべて含むグローバルファイルを取得します。

パラメーター:

  • uuid(必須):グローバルファイルの UUID

install_global

Application データベースのグローバルファイルをテナントプロジェクトにインストールします。

パラメーター:

  • file_uuid(必須):インストールするグローバルファイルの UUID
  • directory_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(必須):モジュールの UUID
  • file_uuid(必須):追加するグローバルファイルの UUID
  • order(任意):インストール順序(指定しない場合は自動で増加します)

install_module

モジュール内のすべてのファイルをテナントプロジェクトにインストールします。

パラメーター:

  • module_uuid(必須):インストールするモジュールの UUID
  • directory_uuid(必須):ファイルのインストール先ディレクトリの UUID

Stellify の仕組み

Stellify は、アプリケーションのコードをテキストファイルではなく、データベースに構造化された JSONとして保存します。このアーキテクチャにより、次のことが可能になります。

  • ピンポイントの精度: AI はほかのコードに触れずに、特定のメソッドを変更できます
  • コードベースをデータのように検索: 特定のクラスを使用するすべてのメソッドを検索できます
  • 即時リファクタリング: アプリケーション全体でメソッド名を瞬時に変更できます
  • ステートメント単位のバージョン管理: 個々のコードステートメントの変更を追跡できます
  • AI ネイティブな開発: 既存のコードを壊す心配なく、AI にきめ細かなアクセスを提供できます
  • 依存関係の自動解決: フレームワークのクラスは Laravel API ドキュメントから自動的に取得されます

この MCP サーバーを通じて Stellify でビルドすると、コードは構造化データに解析され、デプロイ時に実行可能なコードとして組み立て直されます。

依存関係の解決

auto_create_dependencies を使用すると、Stellify は次の順序で依存関係を解決します。

  1. テナントデータベース - クラスがプロジェクトに存在するか確認します
  2. アプリケーションデータベース - 定義済みクラスのグローバルライブラリを確認します
  3. Laravel API ドキュメント - コアの Illuminate\* クラスについては、api.laravel.com から取得します
  4. Vendor ディレクトリ - インストール済みパッケージについては、vendor/ から直接読み込みます
サポート対象のパッケージソース
ソース名前空間方法
Laravel APIIlluminate\*api.laravel.com から取得します
VendorLaravel\Socialite\*vendor/laravel/socialite から読み込みます
VendorLaravel\Cashier\*vendor/laravel/cashier から読み込みます
VendorLaravel\Sanctum\*vendor/laravel/sanctum から読み込みます
VendorLaravel\Passport\*vendor/laravel/passport から読み込みます
VendorSpatie\*vendor/spatie/* パッケージから読み込みます
VendorLivewire\*vendor/livewire/livewire から読み込みます
VendorInertia\*vendor/inertiajs/inertia-laravel から読み込みます

Vendor パッケージについては、Stellify は PHP-Parser を使用して、インストール済みパッケージの実際のメソッドシグネチャを抽出します。これにより、使用中の依存関係に即した正確さが保証されます。

コード構造
Directory
  └── File
        └── Method
              ├── Parameters (Clauses)
              └── Statements
                    └── Clauses / Language Tokens

コードは次の要素に分解されます。

  • ディレクトリ:ファイルを整理するためのコンテナー
  • ファイル:メソッドとファイルのメタデータを含みます
  • メソッド:パラメーターと本体のステートメントを持つ関数
  • ステートメント:コードの単一行または単一のステートメント
  • 節:末端ノード(変数、文字列、数値など)
  • 言語トークン:システム定義のキーワードと記号(再利用可能)

ワークフロー

PHP コントローラーのワークフロー
  1. get_project → ディレクトリの UUID を検索
  2. create_file → type='controller', name='UserController'
  3. create_method → name='store', parameters=[{name:'request', type:'Request'}]
  4. add_method_body → code='return response()->json($request->all());'
Vue コンポーネントのワークフロー
  1. get_project → 'js' ディレクトリの UUID を検索
  2. create_file → js ディレクトリ内に type='js', extension='vue' を指定
  3. インポートとデータのステートメントを作成します。
    • create_statement + add_statement_code: "import { ref } from 'vue';"
    • create_statement + add_statement_code: "const count = ref(0);"
  4. create_method + add_method_body → 関数を作成
  5. html_to_elements → テンプレート HTML を要素に変換
  6. update_element → イベントハンドラーを紐付け(click → メソッド UUID)
  7. 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 にツールが表示されない
  1. お使いの OS に適した設定ファイルのパスであることを確認してください
  2. Stellify API トークンが有効であることを確認してください
  3. Claude Desktop を完全に再起動してください(ウィンドウを閉じるだけでなく、終了してください)
  4. 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 サーバーは、次の役割を担う薄いクライアントです。

  1. Claude にツールを公開します
  2. ツール呼び出しを API リクエストに変換します
  3. 書式設定されたレスポンスを返します

コントリビューション

コントリビューションを歓迎します!コントリビューションガイドラインをご確認のうえ、プルリクエストをぜひお送りください。

サポート

問題や質問がある場合:

Stellify について

Stellify は、AI ネイティブなソフトウェア開発の未来を築いています。コードをテキストファイルではなく構造化データとして保存することで、AI と人間がシームレスに協力し、より優れたソフトウェアをより速く開発できる新しいパラダイムを実現します。

詳しくは stellisoft.com をご覧ください。

ライセンス

MIT License - 詳細は LICENSE ファイルをご覧ください。


Stellify チームより、心を込めて開発しました

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。