Skip to main content
Glama
ivossos

FCCS MCP Agentic Server

by ivossos

get_rest_api_version

Retrieve the current REST API version for Oracle EPM Cloud FCCS to verify compatibility and access available features.

Instructions

Get the REST API version / Obter a versao da API REST

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The main MCP tool handler function that fetches the REST API version using the global FCCS client and returns it wrapped in a standardized success response.
    async def get_rest_api_version() -> dict[str, Any]:
        """Get the REST API version / Obter a versao da API REST.
    
        Returns:
            dict: API version information.
        """
        version = await _client.get_rest_api_version()
        return {"status": "success", "data": version}
  • The tool schema definition specifying the name, description, and empty input schema (no parameters required). Part of TOOL_DEFINITIONS list.
        "name": "get_rest_api_version",
        "description": "Get the REST API version / Obter a versao da API REST",
        "inputSchema": {
            "type": "object",
            "properties": {},
        },
    },
  • Registration of the tool handler in the central TOOL_HANDLERS dictionary used by the agent to dispatch tool calls.
    "get_rest_api_version": application.get_rest_api_version,
  • The underlying FCCSClient method that actually queries the REST API (or mock) for the version information, called by the tool handler.
    async def get_rest_api_version(self) -> dict[str, Any]:
        """Get REST API version / Obter versao da API REST."""
        if self.config.fccs_mock_mode:
            return {"version": self.config.fccs_api_version, "apiVersion": "3.0"}
    
        # Try version endpoints
        for endpoint in ["/rest/version", "/version", "/api/version"]:
            try:
                response = await self._client.get(endpoint)
                if response.status_code == 200:
                    return response.json()
            except Exception:
                continue
    
        return {
            "version": self.config.fccs_api_version,
            "note": "Version endpoint not available, using configured version"
        }
  • The full TOOL_HANDLERS dictionary where all tools are registered, including get_rest_api_version.
        if _fccs_client is None:
            _fccs_client = FccsClient(config)
        return _fccs_client
    
    
    def get_app_name() -> Optional[str]:
        """Get the current application name."""
        return _app_name
    
    
    async def initialize_agent(cfg: Optional[FCCSConfig] = None) -> str:
        """Initialize the agent and connect to FCCS.
    
        Returns:
            str: The application name or error message.
        """
        global _fccs_client, _app_name
    
        use_config = cfg or config
    
        # Initialize FCCS client
        _fccs_client = FccsClient(use_config)
    
        # Set client reference in all tool modules
        application.set_client(_fccs_client)
        jobs.set_client(_fccs_client)
        dimensions.set_client(_fccs_client)
        journals.set_client(_fccs_client)
        data.set_client(_fccs_client)
        reports.set_client(_fccs_client)
        consolidation.set_client(_fccs_client)
        memo.set_client(_fccs_client)
    
        # Initialize feedback service (optional - don't break if it fails)
        feedback_service = None
        try:
            feedback_service = init_feedback_service(use_config.database_url)
            print("Feedback service initialized", file=sys.stderr)
        except Exception as e:
            print(f"Warning: Could not initialize feedback service: {e}", file=sys.stderr)
            print("Tool execution will continue without feedback tracking", file=sys.stderr)
            # Set feedback service to None so callbacks know it's not available
            from fccs_agent.services.feedback_service import _feedback_service
            import fccs_agent.services.feedback_service as feedback_module
            feedback_module._feedback_service = None
    
        # Initialize cache service
        try:
            init_cache_service(use_config.database_url)
            print("Cache service initialized", file=sys.stderr)
        except Exception as e:
            print(f"Warning: Could not initialize cache service: {e}", file=sys.stderr)
    
        # Initialize RL service (optional - only if feedback service is available and RL enabled)
        if use_config.rl_enabled and feedback_service:
            try:
                init_rl_service(
                    feedback_service,
                    use_config.database_url,
                    exploration_rate=use_config.rl_exploration_rate,
                    learning_rate=use_config.rl_learning_rate,
                    discount_factor=use_config.rl_discount_factor,
                    min_samples=use_config.rl_min_samples
                )
                print("RL service initialized", file=sys.stderr)
            except Exception as e:
                print(f"Warning: Could not initialize RL service: {e}", file=sys.stderr)
                print("RL features will be disabled", file=sys.stderr)
    
        # Try to connect to FCCS and get application name
        try:
            print("Connecting to FCCS to retrieve application info...", file=sys.stderr)
            apps = await _fccs_client.get_applications()
            if apps and apps.get("items") and len(apps["items"]) > 0:
                _app_name = apps["items"][0]["name"]
                print(f"Connected to FCCS Application: {_app_name}", file=sys.stderr)
    
                # Set app name in tool modules that need it
                jobs.set_app_name(_app_name)
                dimensions.set_app_name(_app_name)
                journals.set_app_name(_app_name)
                data.set_app_name(_app_name)
                consolidation.set_app_name(_app_name)
                memo.set_app_name(_app_name)
    
                return _app_name
            else:
                print("No applications found", file=sys.stderr)
                return "No applications found"
        except Exception as e:
            print(f"Initialization warning: Could not connect to FCCS: {e}", file=sys.stderr)
            return f"Connection failed: {e}"
    
    
    async def close_agent():
        """Clean up agent resources."""
        global _fccs_client
        if _fccs_client:
            await _fccs_client.close()
            _fccs_client = None
    
    
    # Tool registry - maps tool names to handler functions
    TOOL_HANDLERS = {
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states what the tool does ('Get the REST API version') but doesn't mention whether this is a read-only operation, if it requires authentication, rate limits, or what the return format might be. This is inadequate for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just two language variants in a single line, front-loading the core purpose without any wasted words. Every part of the description directly contributes to understanding the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate but lacks depth. It doesn't explain what the version information includes or how it might be used, which could help an agent understand its role better in context with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to explain parameters, so it appropriately avoids parameter details. A baseline of 4 is given since no parameter information is required or provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'REST API version' in both English and Portuguese, making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_application_info' which might return similar system information, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_application_info' or other sibling tools. There's no mention of context, prerequisites, or exclusions, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other 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/ivossos/fccs-mcp-ag-server'

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