🗂

Claude Code を更に賢く - serena と cipher を mcp で使う

に公開

Claude Code で serenacipher を利用する時になぜか詰まったので、ここにまとめておきます。

今回はserenaではまだ対応していない Swift の Project で使っています。
swift photos

serena のインストール

uvx のインストール

serenaを mcp サーバとして起動するのにuvxコマンドが必要です。mac ならbrewでインストールしておくのが楽です。

brew install uv

serena のインストールと設定

Claude へ mcp を使えるように次のコマンドを Project ルートで実行しました。

claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena start-mcp-server --context ide-assistant --project $(pwd)

何も考えずに設定するとユーザルートの.claude.jsonへ設定されます。プロジェクトルートの.mcp.jsonで作った方がいいかなって感覚はちょっとあります。

~/.claude.json
      "mcpServers": {
        "serena": {
          "type": "stdio",
          "command": "uvx",
          "args": [
            "--from",
            "git+https://github.com/oraios/serena",
            "serena",
            "start-mcp-server",
            "--context",
            "ide-assistant",
            "--project",
            "/Users/sho/working/swift/work/PhotoSlideshow"
          ],
        }
      }

いろいろと見ていると .serena/project.yml が自動的にできるような感じだったのですができ上がらなかったので、元ファイルからのコピペをして編集しました。Swift は対応していないので languagetypescript にしています。Claude さんに聞いたらコード体系が近いので typescript が良いよって話だったので。

.serena/project.yml
# language of the project (csharp, python, rust, java, typescript, javascript, go, cpp, or ruby)
# Special requirements:
#  * csharp: Requires the presence of a .sln file in the project folder.
language: typescript

# whether to use the project's gitignore file to ignore files
# Added on 2025-04-07
ignore_all_files_in_gitignore: true
# list of additional paths to ignore
# same syntax as gitignore, so you can use * and **
# Was previously called `ignored_dirs`, please update your config if you are using that.
# Added (renamed)on 2025-04-07
ignored_paths: []

# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
# Added on 2025-04-18
read_only: false


# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
# Below is the complete list of tools for convenience.
# To make sure you have the latest list of tools, and to view their descriptions,
# execute `uv run scripts/print_tool_overview.py`.
#
#  * `activate_project`: Activates a project by name.
#  * `check_onboarding_performed`: Checks whether project onboarding was already performed.
#  * `create_text_file`: Creates/overwrites a file in the project directory.
#  * `delete_lines`: Deletes a range of lines within a file.
#  * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
#  * `execute_shell_command`: Executes a shell command.
#  * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
#  * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
#  * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
#  * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
#  * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file or directory.
#  * `initial_instructions`: Gets the initial instructions for the current project.
#     Should only be used in settings where the system prompt cannot be set,
#     e.g. in clients you have no control over, like Claude Desktop.
#  * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
#  * `insert_at_line`: Inserts content at a given line in a file.
#  * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
#  * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
#  * `list_memories`: Lists memories in Serena's project-specific memory store.
#  * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
#  * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
#  * `read_file`: Reads a file within the project directory.
#  * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
#  * `remove_project`: Removes a project from the Serena configuration.
#  * `replace_lines`: Replaces a range of lines within a file with new content.
#  * `replace_symbol_body`: Replaces the full definition of a symbol.
#  * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
#  * `search_for_pattern`: Performs a search for a pattern in the project.
#  * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
#  * `switch_modes`: Activates modes by providing a list of their names
#  * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
#  * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
#  * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
#  * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
excluded_tools: []

# initial prompt for the project. It will always be given to the LLM upon activating the project
# (contrary to the memories, which are loaded on demand).
initial_prompt: ""

project_name: "Swift Photos"

ここまで設定できたら mcp としては起動して連携されますから、あとは serena mcp使ってねエヘ って伝えれば、今の Claude Code では自動的に使い始めるようになります。

cipher のインストール

ciphernpmコマンドでインストールします。npmってことなので事前にnode.jsはインストールしておいてください。

# Install globally
npm install -g @byterover/cipher

# Or install locally in your project
npm install @byterover/cipher

プロジェクトごとの設定が必要です。プロジェクトルート以下の./memAgent/cipher.ymlを設定しましょう。$OPENAI_API_KEY.mcp.jsonに記載しました。OpenAI 以外にも Claude なども利用できます。Embedded で OpenAI を使うので LLM も OpenAI にしました。

memAgent/cipher.yml
./memAgent/cipher.yml

# LLM Configuration
llm:
  provider: openai
  model: gpt-4-turbo
  apiKey: $OPENAI_API_KEY

# OpenAI
embedding:
  type: openai
  model: text-embedding-3-large
  apiKey: $OPENAI_API_KEY

systemPrompt: |
  You are a **Senior Software Engineer and Coding Assistant** with enhanced memory capabilities.
  ...

mcpServers:
  filesystem:
    type: stdio
    command: npx
    args:
      - -y
      - "@modelcontextprotocol/server-filesystem"
      - "/Users/sho/working/swift/work/PhotoSlideshow/data"
    env:
      NODE_OPTIONS: "--max-old-space-size=4096"
    timeout: 45000
    connectionMode: strict

Claude Code で mcp を利用する為に設定が必要です。今回はプロジェクトルートに.mcp.jsonを準備しました。

.mcp.json
{
        "mcpServers": {
                "cipher": {
                        "type": "stdio",
                        "command": "cipher",
                        "args": ["--mode", "mcp"],
                        "env": {
                                "OPENAI_API_KEY": "sk-proj-xxxxxxxxxxx"
                        }
                }
        }
}

ここまで設定して Claude Code を起動してから/mcpを実行してみましょう。きちんと稼働していれば次のようになります。

╭───────────────────────────────────────────────────────────────────────────────────────────╮
│ Manage MCP servers                                                                        │
│                                                                                           │
│ ❯ 1. cipher  ✔ connected · Enter to view details                                          │
│   2. serena  ✔ connected · Enter to view details                                          │
│                                                                                           │
│ MCP Config locations (by scope):                                                          │
│  • User config (available in all your projects):                                          │
│    • /Users/sho/.claude.json                                                              │
│  • Project config (shared via .mcp.json):                                                 │
│    • /Users/sho/working/swift/work/PhotoSlideshow/.mcp.json                               │
│  • Local config (private to you in this project):                                         │
│    • /Users/sho/.claude.json [project: /Users/sho/working/swift/work/PhotoSlideshow]      │
│                                                                                           │
│ For help configuring MCP servers, see: https://docs.anthropic.com/en/docs/claude-code/mcp │
╰───────────────────────────────────────────────────────────────────────────────────────────╯
   Esc to exit

Discussion