Skip to main content
Glama

configure_project

Set up a new project by defining its root path and name, organizing files into logical chunks (e.g., functions, classes) for efficient searching and analysis within the MCPunk server.

Instructions

Configure a new project containing files.

Each file in the project is split into 'chunks' - logical sections like functions,
classes, markdown sections, and import blocks.

After configuring, a common workflow is:
1. list_all_files_in_project to get an overview of the project (with
   an initial limit on the depth of the search)
2. Find files by function/class definition:
   find_files_by_chunk_content(... ["def my_funk"])
3. Find files by function/class usage:
   find_files_by_chunk_content(... ["my_funk"])
4. Determine which chunks in the found files are relevant:
    find_matching_chunks_in_file(...)
5. Get details about the chunks:
   chunk_details(...)

Use ~ (tilde) literally if the user specifies it in paths.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_nameYesName of the project, for you to pick buddy, something short and sweet and memorable and unique
root_pathYesRoot path of the project

Implementation Reference

  • The core handler function for the 'configure_project' tool. It is decorated with @mcp.tool() for registration and implements the logic to validate inputs, create a ToolProject instance using FileBreakdownProject, store it in the global PROJECTS dictionary, and return a formatted response describing the configured project and suggested next steps.
    @mcp.tool()
    @log_inputs_outputs()
    def configure_project(
        root_path: Annotated[pathlib.Path, Field(description="Root path of the project")],
        project_name: Annotated[
            str,
            Field(
                description=(
                    "Name of the project, for you to pick buddy, "
                    "something short and sweet and memorable and unique"
                ),
            ),
        ],
    ) -> ToolResponse:
        """Configure a new project containing files.
    
        Each file in the project is split into 'chunks' - logical sections like functions,
        classes, markdown sections, and import blocks.
    
        After configuring, a common workflow is:
        1. list_all_files_in_project to get an overview of the project (with
           an initial limit on the depth of the search)
        2. Find files by function/class definition:
           find_files_by_chunk_content(... ["def my_funk"])
        3. Find files by function/class usage:
           find_files_by_chunk_content(... ["my_funk"])
        4. Determine which chunks in the found files are relevant:
            find_matching_chunks_in_file(...)
        5. Get details about the chunks:
           chunk_details(...)
    
        Use ~ (tilde) literally if the user specifies it in paths.
        """
        path = root_path.expanduser().absolute()
        if project_name in PROJECTS:
            raise ValueError(f"Project {project_name} already exists")
        project = ToolProject(
            chunk_project=FileBreakdownProject(
                root=path,
                file_watch_refresh_freq_seconds=deps.settings().file_watch_refresh_freq_seconds,
                max_chunk_size=deps.settings().max_chunk_size,
            ),
        )
        PROJECTS[project_name] = project
        return MCPToolOutput(
            text=(
                inspect.cleandoc(f"""\
                Project {path} configured with {len(project.chunk_project.files)} files.
                Files are split into 'chunks' - logical sections like:
                - Functions (e.g. 'def my_function')
                - Classes (e.g. 'class MyClass')
                - Markdown sections (e.g. '# Section')
                - Import blocks
    
                After configuring, a common workflow is:
                1. list_all_files_in_project to get an overview of the project (with
                   an initial limit on the depth of the search)
                2. Find files by function/class definition:
                   find_files_by_chunk_content(... ["def my_funk"])
                3. Find files by function/class usage:
                   find_files_by_chunk_content(... ["my_funk"])
                4. Determine which chunks in the found files are relevant:
                    find_matching_chunks_in_file(...)
                5. Get details about the chunks:
                   chunk_details(...)
    
                Do not immediately list files or otherwise use the project
                unless explicitly told to do so.
            """)
            ),
        ).render()
  • The Pydantic model defining the structure of a ToolProject, which is instantiated by the configure_project tool. Includes properties for root path and git path.
    class ToolProject(BaseModel):
        """A project containing files split into chunks and so on.
    
        These are created by the `configure_project` tool, and can be referenced by name
        (which is the key in the `PROJECTS` global dict) when calling other tools.
        """
    
        chunk_project: FileBreakdownProject
    
        model_config = ConfigDict(arbitrary_types_allowed=True)
    
        @property
        def root(self) -> pathlib.Path:
            return self.chunk_project.root
    
        @property
        def git_path(self) -> pathlib.Path:
            if str(self.root).endswith(".git"):
                git_dir_path = self.root
            else:
                git_dir_path = self.root / ".git"
            if not git_dir_path.exists():
                raise ValueError(f"git dir not found at {git_dir_path}")
            return git_dir_path
  • mcpunk/tools.py:36-36 (registration)
    Initialization of the FastMCP instance 'mcp' used to register all tools via @mcp.tool() decorators, including configure_project.
    mcp = FastMCP("Code Analysis")
  • Global dictionary that stores configured projects by name, populated by the configure_project tool.
    PROJECTS: dict[str, "ToolProject"] = {}
Install Server

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jurasofish/mcpunk'

If you have feedback or need assistance with the MCP directory API, please join our Discord server