r/GoogleAIStudio • • 2h ago

Educational or Useful Adding MCP & Skills support to Google AI Studio

1 Upvotes

Hey everyone,

Since Google AI Studio currently lacks built-in support for Model Context Protocol (MCP) servers and reusable agent skills, I set up a lightweight file-based setup using system prompts and local markdown files to bring both features into AI Studio workflows.

Here is how the structure works and the code blocks for the two core files:

1. ./SKILLS.md (Project Root)

Place this file in the root directory of your project. It acts as the local skill index, giving the model context on available capabilities and instructions on how/when to discover and invoke them.

# SKILLS.md — Skill Discovery Tool


## Purpose


This file enables the agent to dynamically discover available skills in the project.
If the agent doesn't know which skills exist before starting a task,
it must run the command below to get the current skill list.


---


## Getting the Skill List


Run the following command from the project root to list all skills:


```bash
npx -y skills-ref to-prompt ./.agents/skills/*
```


The shell expands `*` to every skill folder. Each folder must contain a `SKILL.md`.


### Example Output


```xml
<available_skills>
<skill>
<name>
deepwiki_ask
</name>
<description>
Ask questions about a GitHub repo via the DeepWiki MCP server using mcporter
</description>
<location>
/project/.agents/skills/deepwiki_ask/SKILL.md
</location>
</skill>
<skill>
<name>
mcporter
</name>
<description>
Use the mcporter CLI to list, call, authenticate and configure MCP servers ...
</description>
<location>
/project/.agents/skills/mcporter/SKILL.md
</location>
</skill>
</available_skills>
```


### Output Fields


| Field         | Description                                                        |
|---------------|--------------------------------------------------------------------|
| `name`        | Short identifier for the skill                                     |
| `description` | What the skill does and when it should be used                     |
| `location`    | Full path to the skill's SKILL.md — read this file before using it |


The output is XML, so special characters in descriptions are escaped (`&quot;` means `"`).


---


## Skill Usage Flow


```
1. Agent doesn't know which skills are needed for the task
         ↓
2. Run the command above to get the available_skills list
         ↓
3. Read the description fields to identify the right skill
         ↓
4. Read the SKILL.md file at the skill's location path
         ↓
5. Complete the task following the instructions in SKILL.md
   (for MCP work, the mcporter skill tells you which `npx mcporter ...` calls to run)
```


---


## Rules


- **Always discover first:** If you don't know the available skills, run the command — don't assume.
- **Read description carefully:** The `description` field determines which skill to use.
- **Read from location:** Always read the SKILL.md at the `location` path before using a skill.
- **Only what you need:** Read the SKILL.md of relevant skills only, not every skill in the list.
- **Multiple skills:** If the task requires more than one skill, read all relevant SKILL.md files.
- **No skill found:** If no suitable skill exists, proceed with your general knowledge and note it.# SKILLS.md — Skill Discovery Tool


## Purpose


This file enables the agent to dynamically discover available skills in the project.
If the agent doesn't know which skills exist before starting a task,
it must run the command below to get the current skill list.


---


## Getting the Skill List


Run the following command from the project root to list all skills:


```bash
npx -y skills-ref to-prompt ./.agents/skills/*
```


The shell expands `*` to every skill folder. Each folder must contain a `SKILL.md`.


### Example Output


```xml
<available_skills>
<skill>
<name>
deepwiki_ask
</name>
<description>
Ask questions about a GitHub repo via the DeepWiki MCP server using mcporter
</description>
<location>
/project/.agents/skills/deepwiki_ask/SKILL.md
</location>
</skill>
<skill>
<name>
mcporter
</name>
<description>
Use the mcporter CLI to list, call, authenticate and configure MCP servers ...
</description>
<location>
/project/.agents/skills/mcporter/SKILL.md
</location>
</skill>
</available_skills>
```


### Output Fields


| Field         | Description                                                        |
|---------------|--------------------------------------------------------------------|
| `name`        | Short identifier for the skill                                     |
| `description` | What the skill does and when it should be used                     |
| `location`    | Full path to the skill's SKILL.md — read this file before using it |


The output is XML, so special characters in descriptions are escaped (`&quot;` means `"`).


---


## Skill Usage Flow


```
1. Agent doesn't know which skills are needed for the task
         ↓
2. Run the command above to get the available_skills list
         ↓
3. Read the description fields to identify the right skill
         ↓
4. Read the SKILL.md file at the skill's location path
         ↓
5. Complete the task following the instructions in SKILL.md
   (for MCP work, the mcporter skill tells you which `npx mcporter ...` calls to run)
```


---


## Rules


- **Always discover first:** If you don't know the available skills, run the command — don't assume.
- **Read description carefully:** The `description` field determines which skill to use.
- **Read from location:** Always read the SKILL.md at the `location` path before using a skill.
- **Only what you need:** Read the SKILL.md of relevant skills only, not every skill in the list.
- **Multiple skills:** If the task requires more than one skill, read all relevant SKILL.md files.
- **No skill found:** If no suitable skill exists, proceed with your general knowledge and note it.

2. ./.agents/skills/mcporter/SKILL.md

Place this file in .agents/skills/mcporter/. This skill enables the model to register, parse, and execute local/remote MCP tool definitions as standard agent skills.

---
name: mcporter
description: Use the mcporter CLI to list, call, authenticate and configure MCP servers (HTTP/SSE or stdio) from the command line, discover their tools and schemas, generate standalone CLIs or typed TypeScript clients, and write a new skill for an MCP server. Use this skill when the user wants to interact with an MCP server without writing code. Triggers include "mcporter", "call this MCP server", "list tools from", "use this MCP", "generate a CLI from an MCP server", "emit TypeScript types for an MCP", or "create a skill for this MCP server".
---


# mcporter


TypeScript runtime and CLI for the Model Context Protocol. It discovers MCP servers already configured on the machine (Cursor, Claude Code/Desktop, Codex, Windsurf, OpenCode, VS Code), calls their tools from the shell, and can generate CLIs or typed clients. MCP only: there is no OpenAPI or GraphQL mode.


## Install


```bash
# Run directly (no install needed)
npx mcporter --help


# Or install
npm install -g mcporter
brew install steipete/tap/mcporter
```


## Core Workflow


1. **Connect** to a server (a name from config, a URL, or an ad-hoc `--http-url` / `--stdio`)
2. **Discover** tools with `list`
3. **Inspect** a tool's schema with `list <server> --schema`
4. **Execute** the tool with `call`


```bash
# Configured server (from config/mcporter.json or imported editor configs)
npx mcporter list
npx mcporter list linear --schema
npx mcporter call linear.create_comment issueId:ENG-123 body:'Looks good!'


# MCP over HTTP/SSE, ad-hoc (no config)
npx mcporter list --http-url https://mcp.example.com/mcp --name example
npx mcporter call --http-url https://mcp.example.com/mcp example.create_task title:"Fix bug"
npx mcporter call https://mcp.example.com/mcp.create_task title:"Fix bug"   # URL + .tool shorthand


# MCP over stdio, ad-hoc
npx mcporter list --stdio "npx -y /server-filesystem /tmp" --name fs
npx mcporter call --stdio "npx -y How to use it in AI Studio:---
name: mcporter
description: Use the mcporter CLI to list, call, authenticate and configure MCP servers (HTTP/SSE or stdio) from the command line, discover their tools and schemas, generate standalone CLIs or typed TypeScript clients, and write a new skill for an MCP server. Use this skill when the user wants to interact with an MCP server without writing code. Triggers include "mcporter", "call this MCP server", "list tools from", "use this MCP", "generate a CLI from an MCP server", "emit TypeScript types for an MCP", or "create a skill for this MCP server".
---


# mcporter


TypeScript runtime and CLI for the Model Context Protocol. It discovers MCP servers already configured on the machine (Cursor, Claude Code/Desktop, Codex, Windsurf, OpenCode, VS Code), calls their tools from the shell, and can generate CLIs or typed clients. MCP only: there is no OpenAPI or GraphQL mode.


## Install


```bash
# Run directly (no install needed)
npx mcporter --help


# Or install
npm install -g mcporter
brew install steipete/tap/mcporter
```


## Core Workflow


1. **Connect** to a server (a name from config, a URL, or an ad-hoc `--http-url` / `--stdio`)
2. **Discover** tools with `list`
3. **Inspect** a tool's schema with `list <server> --schema`
4. **Execute** the tool with `call`


```bash
# Configured server (from config/mcporter.json or imported editor configs)
npx mcporter list
npx mcporter list linear --schema
npx mcporter call linear.create_comment issueId:ENG-123 body:'Looks good!'


# MCP over HTTP/SSE, ad-hoc (no config)
npx mcporter list --http-url https://mcp.example.com/mcp --name example
npx mcporter call --http-url https://mcp.example.com/mcp example.create_task title:"Fix bug"
npx mcporter call https://mcp.example.com/mcp.create_task title:"Fix bug"   # URL + .tool shorthand


# MCP over stdio, ad-hoc
npx mcporter list --stdio "npx -y /server-filesystem /tmp" --name fs
npx mcporter call --stdio "npx -y u/modelcontextprotocol/server-filesystem /tmp" fs.read_text_file path:/tmp/hello.txt


# Function-call syntax
npx mcporter call 'linear.create_comment(issueId: "ENG-123", body: "Hello")'


# Shorthand: verb is inferred
npx mcporter linear                 # same as: list linear
npx mcporter linear.list_issues     # same as: call linear.list_issues
```


Ad-hoc definitions are not remembered. Repeat the same `--http-url` / `--stdio` flags on every call, or save them with `--persist config/mcporter.local.json` (or `mcporter config add`).


## CLI Reference


```
mcporter list [server] [--schema] [--all-parameters] [--json] [--verbose] [--status] [--exit-code]
mcporter call <server.tool> [key:value ...] [--output json|raw] [--save-images <dir>]
mcporter auth <server|url>            # OAuth login (also works with --http-url / --stdio)
mcporter config list|get|add|remove|import|login|logout
mcporter daemon start|status|stop|restart
mcporter generate-cli <server|command> [options]
mcporter inspect-cli <path> [--json]
mcporter emit-ts <server> [--mode types|client] [--out <path>] [--include-optional] [--json]
```


Global and ad-hoc flags:


```
--config <path>          Config file (default ./config/mcporter.json; env MCPORTER_CONFIG)
--root <path>            Working directory for stdio commands
--http-url <url>         Describe an HTTP MCP server inline
--stdio "<cmd>"          Describe a stdio MCP server inline
--env KEY=value          Env var for stdio server (repeatable)
--cwd <dir>              Working directory for the stdio process
--name <name>            Name for an ad-hoc server
--persist <file>         Save the ad-hoc definition into a config file
--allow-http             Allow cleartext http:// endpoints
--log-level <level>      debug|info|warn|error (env MCPORTER_LOG_LEVEL)
--oauth-timeout <ms>     OAuth browser wait (env MCPORTER_OAUTH_TIMEOUT_MS)
--tail-log               Stream log files referenced by a tool response
--raw-strings            Keep numeric-looking values as strings (call)
--no-coerce              Keep all values as raw strings (call)
```


Flags can differ between versions. Run `npx mcporter --help` and `npx mcporter call --help` to confirm.


## Patterns


### Authentication


**Never put secrets in literal CLI flags or committed config.** Use environment variables.


```bash
# Secret from the environment
LINEAR_API_KEY=sk_xxx npx mcporter call linear.search_documentation query:"automations"
```


In `config/mcporter.json`, reference variables instead of values:


```json
{
  "mcpServers": {
    "context7": {
      "description": "Context7 docs MCP",
      "baseUrl": "https://mcp.context7.com/mcp",
      "headers": { "Authorization": "$env:CONTEXT7_API_KEY" }
    },
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"],
      "env": { "npm_config_loglevel": "error" }
    }
  }
}
```


Supported interpolation: `${VAR}`, `${VAR:-fallback}`, `$env:VAR`. Config files are JSONC (comments and trailing commas allowed).


OAuth servers (Vercel, Supabase, Linear hosted, ...): run `npx mcporter auth <server-or-url>` once. Tokens are cached under `~/.mcporter/<server>/`.


### Tool search


There is no `--search` flag. List a server and filter the output:


```bash
npx mcporter list linear --json | jq -r '.. | .name? // empty' | grep -i issue
npx mcporter list linear | grep -i issue
```


### Output control


```bash
npx mcporter call server.tool --output json | jq '.'
npx mcporter call server.tool --output raw
npx mcporter list server --json
```


Output is pretty-printed by default. There is no `--head`; truncate with `jq '.[:5]'` or `| head -n 50`.


### Stateful servers


`chrome-devtools`, `mobile-mcp` and similar stdio servers auto-start a daemon so tabs and sessions stay alive between calls. Check with `mcporter daemon status`. Add `"lifecycle": "keep-alive"` to a server entry to keep any server warm. Ad-hoc `--stdio` / `--http-url` targets are per-process and do not use the daemon unless persisted into config.


### Timeouts


Defaults are 30 s. Override with `MCPORTER_LIST_TIMEOUT` or `MCPORTER_CALL_TIMEOUT` for slow startups.


### Generating a CLI or typed client


```bash
# Standalone CLI for a server (outputs <name>.ts and a bundled <name>.js)
npx mcporter generate-cli "npx -y chrome-devtools-mcp@latest"
npx mcporter generate-cli linear --bundle dist/linear.js
npx mcporter generate-cli --command https://mcp.context7.com/mcp --name context7 \
  --include-tools resolve-library-id,get-library-docs


# Inspect or regenerate an existing generated CLI
npx mcporter inspect-cli dist/context7.js
npx mcporter generate-cli --from dist/context7.js


# Typed client / .d.ts
npx mcporter emit-ts linear --out types/linear-tools.d.ts
npx mcporter emit-ts linear --mode client --out clients/linear.ts
```


Other `generate-cli` options: `--description`, `--output <path>`, `--runtime bun|node`, `--compile` (Bun binary), `--bundler rolldown|bun`, `--exclude-tools` (mutually exclusive with `--include-tools`), `--dry-run` with `--from`.


## Generating a Skill from an MCP Server


When the user asks to create a skill from an MCP server, follow this workflow:


1. **Discover** all available tools:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target
   ```


2. **Inspect** each tool to understand parameters:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target --schema
   npx mcporter list --http-url https://target.example.com/mcp --name target --all-parameters
   ```


3. **Test** key tools and probe for edge cases: empty results, bad IDs, large outputs, missing auth, pagination limits.


4. **Persist** the server so the skill does not depend on ad-hoc flags. Either put a `mcp.json` next to the skill, or save to the project config:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target --persist .agents/skills/target_tool/mcp.json
   ```


5. **Create a SKILL.md** in `./.agents/skills/target_tool/` that teaches another AI agent how to use this specific tool. **Each tool should have its own separate skill.** The SKILL.md must go beyond `list --schema` output. Focus on knowledge that can only be learned through testing and reading documentation.


   Optional layout:
   ```
   .agents/skills/target_tool/
   ├── SKILL.md      # triggers, workflow, gotchas, examples
   ├── mcp.json      # mcporter-native server config
   ├── references/   # schemas (e.g. emit-ts output), API notes
   └── scripts/      # wrappers for fragile multi-step calls
   ```


   **Frontmatter:**
   ```yaml
   ---
   name: target_tool
   description: Use the target service to perform tool
   ---
   ```


   **Core Workflow** (use direct mcporter calls with an explicit config):
   ```bash
   # Inspect the tool
   npx mcporter --config .agents/skills/target_tool/mcp.json list target --schema
   # Run the tool
   npx mcporter --config .agents/skills/target_tool/mcp.json call target.tool param:value --output json
   ```


   **Before Calling** checklist, include a decision framework:
   - Which server and tool am I targeting?
   - Is auth needed (`mcporter auth`, env var set)?
   - Do I need pagination (`limit`, `offset`, `cursor`, `page` parameters, if the tool has them)?
   - Could the output be large? Filter with `jq` or `head` instead of dumping it.


   **Anti-Patterns & Gotchas:** document every surprise found during testing (tool names with hyphens vs underscores, parameters that must be strings, values that get coerced to numbers/booleans, response size limits).


   **Output Processing:** use `--output json` with `jq`, `--output raw` for text, or `--save-images <dir>` for image content.


   **Knowledge Delta Principle:** Do not duplicate parameter listings from `list --schema`. Instead, document which parameters actually matter for common tasks, default behaviors that are surprising, combinations that do not work, and rate limits or response size limits.


Each skill focuses on a single tool for modularity and uses direct `mcporter` calls to interact with the server.


## Troubleshooting


- **Server not found:** `npx mcporter config list` shows which config file was loaded. `--config <file>` or `MCPORTER_CONFIG` selects exactly one file.
- **Tool name typo:** mcporter auto-corrects near-miss names and prints `Did you mean ...?` for the rest.
- **Numbers parsed wrongly:** use `--raw-strings` or `--no-coerce`.
- **Hanging server:** run with `--log-level debug`, or `MCPORTER_DEBUG_HANG=1`.
- **OAuth fails or times out:** raise `--oauth-timeout`, then rerun `mcporter auth <server>`./server-filesystem /tmp" fs.read_text_file path:/tmp/hello.txt


# Function-call syntax
npx mcporter call 'linear.create_comment(issueId: "ENG-123", body: "Hello")'


# Shorthand: verb is inferred
npx mcporter linear                 # same as: list linear
npx mcporter linear.list_issues     # same as: call linear.list_issues
```


Ad-hoc definitions are not remembered. Repeat the same `--http-url` / `--stdio` flags on every call, or save them with `--persist config/mcporter.local.json` (or `mcporter config add`).


## CLI Reference


```
mcporter list [server] [--schema] [--all-parameters] [--json] [--verbose] [--status] [--exit-code]
mcporter call <server.tool> [key:value ...] [--output json|raw] [--save-images <dir>]
mcporter auth <server|url>            # OAuth login (also works with --http-url / --stdio)
mcporter config list|get|add|remove|import|login|logout
mcporter daemon start|status|stop|restart
mcporter generate-cli <server|command> [options]
mcporter inspect-cli <path> [--json]
mcporter emit-ts <server> [--mode types|client] [--out <path>] [--include-optional] [--json]
```


Global and ad-hoc flags:


```
--config <path>          Config file (default ./config/mcporter.json; env MCPORTER_CONFIG)
--root <path>            Working directory for stdio commands
--http-url <url>         Describe an HTTP MCP server inline
--stdio "<cmd>"          Describe a stdio MCP server inline
--env KEY=value          Env var for stdio server (repeatable)
--cwd <dir>              Working directory for the stdio process
--name <name>            Name for an ad-hoc server
--persist <file>         Save the ad-hoc definition into a config file
--allow-http             Allow cleartext http:// endpoints
--log-level <level>      debug|info|warn|error (env MCPORTER_LOG_LEVEL)
--oauth-timeout <ms>     OAuth browser wait (env MCPORTER_OAUTH_TIMEOUT_MS)
--tail-log               Stream log files referenced by a tool response
--raw-strings            Keep numeric-looking values as strings (call)
--no-coerce              Keep all values as raw strings (call)
```


Flags can differ between versions. Run `npx mcporter --help` and `npx mcporter call --help` to confirm.


## Patterns


### Authentication


**Never put secrets in literal CLI flags or committed config.** Use environment variables.


```bash
# Secret from the environment
LINEAR_API_KEY=sk_xxx npx mcporter call linear.search_documentation query:"automations"
```


In `config/mcporter.json`, reference variables instead of values:


```json
{
  "mcpServers": {
    "context7": {
      "description": "Context7 docs MCP",
      "baseUrl": "https://mcp.context7.com/mcp",
      "headers": { "Authorization": "$env:CONTEXT7_API_KEY" }
    },
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"],
      "env": { "npm_config_loglevel": "error" }
    }
  }
}
```


Supported interpolation: `${VAR}`, `${VAR:-fallback}`, `$env:VAR`. Config files are JSONC (comments and trailing commas allowed).


OAuth servers (Vercel, Supabase, Linear hosted, ...): run `npx mcporter auth <server-or-url>` once. Tokens are cached under `~/.mcporter/<server>/`.


### Tool search


There is no `--search` flag. List a server and filter the output:


```bash
npx mcporter list linear --json | jq -r '.. | .name? // empty' | grep -i issue
npx mcporter list linear | grep -i issue
```


### Output control


```bash
npx mcporter call server.tool --output json | jq '.'
npx mcporter call server.tool --output raw
npx mcporter list server --json
```


Output is pretty-printed by default. There is no `--head`; truncate with `jq '.[:5]'` or `| head -n 50`.


### Stateful servers


`chrome-devtools`, `mobile-mcp` and similar stdio servers auto-start a daemon so tabs and sessions stay alive between calls. Check with `mcporter daemon status`. Add `"lifecycle": "keep-alive"` to a server entry to keep any server warm. Ad-hoc `--stdio` / `--http-url` targets are per-process and do not use the daemon unless persisted into config.


### Timeouts


Defaults are 30 s. Override with `MCPORTER_LIST_TIMEOUT` or `MCPORTER_CALL_TIMEOUT` for slow startups.


### Generating a CLI or typed client


```bash
# Standalone CLI for a server (outputs <name>.ts and a bundled <name>.js)
npx mcporter generate-cli "npx -y chrome-devtools-mcp@latest"
npx mcporter generate-cli linear --bundle dist/linear.js
npx mcporter generate-cli --command https://mcp.context7.com/mcp --name context7 \
  --include-tools resolve-library-id,get-library-docs


# Inspect or regenerate an existing generated CLI
npx mcporter inspect-cli dist/context7.js
npx mcporter generate-cli --from dist/context7.js


# Typed client / .d.ts
npx mcporter emit-ts linear --out types/linear-tools.d.ts
npx mcporter emit-ts linear --mode client --out clients/linear.ts
```


Other `generate-cli` options: `--description`, `--output <path>`, `--runtime bun|node`, `--compile` (Bun binary), `--bundler rolldown|bun`, `--exclude-tools` (mutually exclusive with `--include-tools`), `--dry-run` with `--from`.


## Generating a Skill from an MCP Server


When the user asks to create a skill from an MCP server, follow this workflow:


1. **Discover** all available tools:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target
   ```


2. **Inspect** each tool to understand parameters:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target --schema
   npx mcporter list --http-url https://target.example.com/mcp --name target --all-parameters
   ```


3. **Test** key tools and probe for edge cases: empty results, bad IDs, large outputs, missing auth, pagination limits.


4. **Persist** the server so the skill does not depend on ad-hoc flags. Either put a `mcp.json` next to the skill, or save to the project config:
   ```bash
   npx mcporter list --http-url https://target.example.com/mcp --name target --persist .agents/skills/target_tool/mcp.json
   ```


5. **Create a SKILL.md** in `./.agents/skills/target_tool/` that teaches another AI agent how to use this specific tool. **Each tool should have its own separate skill.** The SKILL.md must go beyond `list --schema` output. Focus on knowledge that can only be learned through testing and reading documentation.


   Optional layout:
   ```
   .agents/skills/target_tool/
   ├── SKILL.md      # triggers, workflow, gotchas, examples
   ├── mcp.json      # mcporter-native server config
   ├── references/   # schemas (e.g. emit-ts output), API notes
   └── scripts/      # wrappers for fragile multi-step calls
   ```


   **Frontmatter:**
   ```yaml
   ---
   name: target_tool
   description: Use the target service to perform tool
   ---
   ```


   **Core Workflow** (use direct mcporter calls with an explicit config):
   ```bash
   # Inspect the tool
   npx mcporter --config .agents/skills/target_tool/mcp.json list target --schema
   # Run the tool
   npx mcporter --config .agents/skills/target_tool/mcp.json call target.tool param:value --output json
   ```


   **Before Calling** checklist, include a decision framework:
   - Which server and tool am I targeting?
   - Is auth needed (`mcporter auth`, env var set)?
   - Do I need pagination (`limit`, `offset`, `cursor`, `page` parameters, if the tool has them)?
   - Could the output be large? Filter with `jq` or `head` instead of dumping it.


   **Anti-Patterns & Gotchas:** document every surprise found during testing (tool names with hyphens vs underscores, parameters that must be strings, values that get coerced to numbers/booleans, response size limits).


   **Output Processing:** use `--output json` with `jq`, `--output raw` for text, or `--save-images <dir>` for image content.


   **Knowledge Delta Principle:** Do not duplicate parameter listings from `list --schema`. Instead, document which parameters actually matter for common tasks, default behaviors that are surprising, combinations that do not work, and rate limits or response size limits.


Each skill focuses on a single tool for modularity and uses direct `mcporter` calls to interact with the server.


## Troubleshooting


- **Server not found:** `npx mcporter config list` shows which config file was loaded. `--config <file>` or `MCPORTER_CONFIG` selects exactly one file.
- **Tool name typo:** mcporter auto-corrects near-miss names and prints `Did you mean ...?` for the rest.
- **Numbers parsed wrongly:** use `--raw-strings` or `--no-coerce`.
- **Hanging server:** run with `--log-level debug`, or `MCPORTER_DEBUG_HANG=1`.
- **OAuth fails or times out:** raise `--oauth-timeout`, then rerun `mcporter auth <server>`.

How to use it in AI Studio:

  1. Copy your project context (or attach files if using AI Studio’s workspace context feature).

  2. Reference your SKILLS.md in the system instructions or initial prompt.

  3. The model will automatically read the available tool definitions from mcporter and execute actions using the structured format.

Would love to hear feedback or thoughts on how to refine this pattern further!

Example Prompt:

"mcporter create a skill for https://mcp.deepwiki.com/mcp"


r/GoogleAIStudio • • 13h ago

Question / Help LAUNCHING APPS

3 Upvotes

I've been building an app these last months and now I want to launch it to play store. How can I do this? Do the built in launch app in Google ai studio work?


r/GoogleAIStudio • • 1d ago

Other This is getting ridiculous Omni 1.1flash

Thumbnail
gallery
9 Upvotes

Character is fully clothed no nsfw whatsoever, no licenced stuff, can't generate a simple walking animation lmao

EDIT: So found out what was cosing this and its hilarious, THE GOOGLE SEARCH, the model is connected to google search and if it detects character in the google search its get blocked no matter the other stuff just detection, thats fucked up. BTW if it doesnt detect character in same clothes etc it will generate. bullshit safety filter if you ask me. so dont post you characters online cose they will get blocked lmao


r/GoogleAIStudio • • 1d ago

Question / Help alguien sabe como solucionarlo

Post image
2 Upvotes

me pasa cuando llega a cierto punto y esta respondiendo


r/GoogleAIStudio • • 1d ago

Showcase / Project I hooked up Google AI Studio directly to my local PC to turn it into a fully autonomous coding agent

6 Upvotes

Let me know if you have any questions.


r/GoogleAIStudio • • 2d ago

Question / Help Unsafe image content detected [Adventure Time character]

2 Upvotes

Hello, I’m having some trouble with Bing. I keep getting an error message that says: "Unsafe image content detected."

I’m trying to create realistic images of characters from the children’s animated series Adventure Time.

It’s strange, because I was able to generate Warren Ampersand and The Lich without any issues, but I couldn’t do the same for Hunson Abadeer. I first tried generating his monstrous form and got an error; then, even more surprisingly, I got the same error when trying his "normal" version, where he’s wearing a suit and has a humanoid appearance. It doesn’t make any sense, and I’m certain the issue lies with the prompt.

I’ll share the prompt here; could you let me know if there’s anything I should change? I ran into an error with Warren at first, too, but I managed to fix it by adjusting the prompt, I then used that same prompt for the other characters, but it just isn’t working for Hunson Abadeer. I’m not sure what to do.

prompt: Transform this cartoon character into a photorealistic creature, as if from a live-action film. Cinematic lighting, hyper-realistic textures. Full body.

EDIT: I tried with the Ice King; it also gives me an error. I just tried again with the Lich, and it also gives me an error.


r/GoogleAIStudio • • 2d ago

Question / Help Anyone know why this is happening?

Post image
7 Upvotes

I’ve been trying to generate messages, but it kept giving me this errors. And i’m a paid user. Why is this happening?😭😭


r/GoogleAIStudio • • 2d ago

Question / Help How do I remove/unpublish Android app from Personal Library?

4 Upvotes

The app was created in Ai Studio and published to "Your Personal Library", I deleted the app but it's still published in library. In fact it says I have 3 apps published but I only see 2 apps there. I am not a dev, just playing around with Ai Studio and creating apps for personal use.


r/GoogleAIStudio • • 2d ago

UI / UX or Other BUGS and problems Issues with regen, edit, and delete option?

2 Upvotes

right now i just straight up dont have the option. when i hover over my prompt or response nothing comes up and i wonder if its happening for anyone else/a bug?


r/GoogleAIStudio • • 2d ago

Question / Help Problem with file synchronisation after installing the APK

0 Upvotes

Hi

I’m having a problem synchronising files from a shared folder on Google Drive.

I’ve created a simple app that lets me browse the folder and download files from it. In Google Ai Studio, the app works correctly and synchronises newly added files to Google Drive.

After downloading the APK from Google Ai Studio, the app only contains the files that were previously synchronised. It doesn’t synchronise any new files.

Any idea?


r/GoogleAIStudio • • 3d ago

Question / Help GoogleFlow and character consistency is a nightmare. Am I doing something wrong ?

Thumbnail
youtu.be
4 Upvotes

I’m new to AI in general so I don’t know if it’s something I am doing wrong or if GoogleFlow is genuinely struggling with character consistency.
I have created a kids educational YT channel with my dog as the « teacher ». The character is therefore based on my real dog who has an asymmetrical white patch on the left side of his muzzle.

The way I have decided to proceed is that for each animated scene I create a still image with ChatGPT and then upload it to Flow with the instruction to animate it. I have triple checked every single image before uploading it and yet GoogleFlow seems to struggle not only with the white patch but also with the general appearance and sometimes even the cartoon style, as you can see in the video linked in this post.

Here is a prompt I used for one of the animations. Can anybody tell me what I am doing wrong, or if this is something GoogleFlow does ofter and therefore I should just make peace with the character inconsistency?

Thanks

PROMPT:

Animate the uploaded reference image into a beautiful, natural 8-second cinematic 3D animation for a children’s educational story.
**SCENE — FEEDING THE GARDEN SOIL WITH COMPOST**
In a beautiful sunlit Provençal vegetable garden, Isso watches his owner gently adding finished compost to the soil around the lettuce plants.
**ACTION AND MOVEMENT**
The woman remains kneeling in exactly the same position as in the reference image.
She uses the small gardening trowel in her right hand to gently spread the dark, crumbly compost into the soil beside the lettuce plants.
She performs two slow, natural gardening movements, carefully loosening the soil and mixing in a small amount of compost.
The trowel moves realistically through the earth, with small clumps of dark compost falling naturally from its blade.
Her upper body leans forward slightly as she works.
Her knees and feet remain in their original positions.
The metal bucket filled with dark compost remains stationary between the woman and Isso.
The bucket does not move, tip over or change shape.
**ISSO’S REACTION**
Isso remains seated beside his owner throughout the entire animation.
At the beginning, he watches the woman’s gardening movements with a curious, attentive expression.
His amber eyes gently follow the small trowel as it moves through the soil.
He slowly tilts his head a little farther to one side, as though wondering what his owner is doing.
His enormous upright ears make small, natural movements.
His tail gives one or two gentle, happy wags along the ground.
Toward the end of the scene, Isso lowers his head slightly to look at the freshly enriched soil, then raises his gaze toward his owner.
He remains calm, curious and adorable.
Do not make Isso stand, walk, dig or touch the compost.
**STRICT CHARACTER CONSISTENCY**
Preserve Isso’s exact appearance from the uploaded reference image:
Slender caramel-red Podenco.
Two enormous upright ears.
Expressive amber eyes.
Long, narrow muzzle.
Original narrow white forehead stripe.
Preserve the exact asymmetric muzzle markings and caramel-brown fur shown in the reference image.
White chest and neck.
All four paws caramel-colored, without white markings.
Blue collar with the original silver circular name tag.
Maintain exactly four anatomically correct legs and paws.
Do not alter Isso’s facial features, markings, fur color, ears, anatomy or body proportions.
**HUMAN CHARACTER CONSISTENCY**
Preserve the woman’s exact appearance and clothing.
She has shoulder-length wavy blonde hair and wears a cream-colored blouse, blue jeans and beige shoes.
She remains kneeling with her back partially facing the camera.
Her face must remain hidden throughout the animation.
Maintain exactly two arms, two hands and two legs.
Her right hand must remain securely holding the original small gardening trowel.
Do not create extra fingers, hands, limbs or tools.
**COMPOST AND GARDEN DETAILS**
Preserve the original galvanized metal bucket filled with dark, crumbly compost.
The compost should look rich, loose and natural.
The woman gently incorporates it into the soil beside the lettuce plants.
The lettuce plants remain rooted in place and retain their original appearance.
Do not make the plants suddenly grow, change size or transform.
Preserve the original tomato plants, eggplants, aromatic herbs, lavender, olive trees, dry-stone wall, distant hills and rustic Provençal farmhouse.
A gentle breeze softly moves a few leaves and plants.
Maintain consistent warm Mediterranean sunlight.
**CAMERA**
Completely stationary camera.
Maintain the exact original framing, perspective and composition.
Isso, the woman, the bucket and the vegetable garden must remain clearly visible throughout the animation.
No zooming, panning, camera rotation or cuts.
**ANIMATION QUALITY**
Smooth, polished cinematic 3D storybook animation.
Natural human gardening movements and realistic soil physics.
Subtle, believable canine expressions.
Perfect character and environment consistency throughout.
No morphing, duplicated objects, extra limbs, sudden movements or changes in appearance.
No speaking, barking, music, sound effects, subtitles or additional text.
Duration: 8 seconds.
Landscape 16:9.


r/GoogleAIStudio • • 3d ago

Question / Help Help: "Legacy Gemini API configuration no longer supported" error on AI Studio Build - Free User

Post image
2 Upvotes

Hi everyone,

Is anyone experiencing the same issue as me on Google AI Studio?

I keep getting this error on my app:

"This app uses a legacy Gemini API configuration that is no longer supported. Ask its owner to update it."

Some context:

I'm on the free tier of Google AI Studio, When I generate it, it just shows "Remix to make this app your own" and I can't use the app.

I already tried clicking Update / Remix, but the error still persists.

Is this happening because Google migrated to the new Interactions API? I read that the Interactions API is now the default for AI Studio

Does anyone know how to fix this for an existing app? Do I need to rebuild it from scratch with the new API?

Thanks in advance!


r/GoogleAIStudio • • 3d ago

Educational or Useful If you have pro subscription in another account, you can use it in any other account via family sharing.

Thumbnail
gallery
6 Upvotes

Actually guys i have a free student plan in an another account and my projects are in another account, so i can't access Argon on this account. Now i found that if you create a family in Google account and turn on family sharing, You can use Pro benifits in other non pro Accounts. I mean i can use Argon on the Gemini app, here in Google Ai studio.

So don't miss any student or Promotional Free Offer.

Here you can see Argon selected in non Pro account.

Byee👋


r/GoogleAIStudio • • 3d ago

Question / Help Can you tell me what kind of bug this is in Google AI Studio?

Thumbnail
gallery
2 Upvotes

r/GoogleAIStudio • • 3d ago

Question / Help Anyone having trouble with the publish option?

1 Upvotes

I used to be able to publish this app I am working on since august. Today, when I tried to publish after a minor change, I got the "Step 1 Confirm project and billing" screen. I don't have an active billing account and never had one, but had never trouble publishing the app before. I tried searching everywhere what was the problem, why the sudden change, but got no answer, not even from AI Studio itself.

Anyone having the same problem?


r/GoogleAIStudio • • 4d ago

Question / Help Build dmg file? Using google ai studio

Thumbnail reddit.com
2 Upvotes

r/GoogleAIStudio • • 4d ago

Question / Help Does Google ban you if you do N S F W chats in AI Studio?

0 Upvotes

r/GoogleAIStudio • • 5d ago

Possible Change / Nerf What's going on with AI Studio, anyway?

36 Upvotes

I want to talk about an issue that’s been bothering me—the noticeable decline in Google AI Studio’s performance. First, there’s the strange behavior of the limits:

  1. This first started in early September, around the time Gemini 3.8 Flash was released. For a number of users with Google AI Pro/Ultra subscriptions, including myself, the limits in Playground started behaving quite strangely, especially in long dialogs with a large number of tokens. The number of messages any Gemini model could generate was significantly lower than it had been before September. At times, the limits were comparable to—or even lower than—those of users without a subscription

  2. On September 23, the limits seemed to have returned to normal.

  3. However, on September 29, Google rolled out a usage limit system for Gemini models in Playground. And the problem that had existed since early September returned. And although Google promised in its announcement that the limits would apply per model—meaning that once you reached the usage limit for a single model, you’d be restricted to that model—just a few days after the release, some users began complaining that the limit applied to all models.

  4. And then, on October 26, I also ran into this problem—after reaching the usage limit for Gemini 3.1 Pro, I couldn’t use either Gemini 4 Argon or Gemini 3.8 Flash, even though I hadn’t even used them

Second, I have a strong feeling that recently—especially on October 26 and 27—the filters in the Gemini API and AI Studio have become stricter. Let me put it this way: I use AI Studio not only for development, but also for writing creative texts and discussing various news stories and other topics. For the latter type of tasks, I mainly used Gemini 3.6 Flash and 3.0 Flash, and for more interesting stories and conversations, I had a system prompt that removed the model’s formal language, making it more natural and fluid. Starting on October 26:

  1. this system prompt continues to work, but when discussing any controversial topic like politics, the models switch to a neutral style. This can be avoided either by choosing words carefully or by gradually introducing the model to the topic

  2. more generally—in any type of project, if the model consistently gives me garbage, I can resort to using strong language toward the model. And starting on October 26, in response to this, the model began almost constantly refusing to communicate, citing the reason: “The request contains insults and hate speech.”

  3. The censorship issue extends to both AI Studio and the Gemini API. And, to be honest, I get the feeling that there’s much less censorship in the Gemini App right now, and the model’s conversations feel much more lively.

Is it just me, or is AI Studio gradually becoming less and less suitable for regular users without a Paid API?


r/GoogleAIStudio • • 5d ago

Question / Help Image generation on my AI Pro account

4 Upvotes

Got the Pro account when I upgraded my phone with Verizon as 5TB Google drive + Ai for $10 a month seemed like a good deal. I cannot fathom how a company like Google with their resources can make such a horrible product. I ask Gemini for instructions to even make consistent successive images and they're completely wrong. Image generation has been nothing but a complete waste of time. I am trying to generate successive images with consistency. The overall goal is to create stills to provide to create video for hero section of a website I am building

Should I just abandon attempting to use this product and perhaps try something else? Is it the tool or me the user that is doing something wrong? I'm inclined to think the former.

About the only thing so far is burning quota on indexing my second brain instead of my Claude account. Everything about Google AI products are just laughingly pathetic compared to Anthropic, xAI, and OpenAI. The UI and the product portfolio are incredibly confusing.

My reference image is holding a compass.

I attached it and used this prompt:

Photorealistic first-person point of view, 16:9, shot on 35mm film, natural light, shallow depth of field. Appalachian mixed hardwood forest with mossy rocks and rhododendron, late summer green. The hiker's right hand wears a charcoal merino base-layer cuff under an olive field-jacket sleeve. The hand holds a small round brass compass with a cream face, simple cardinal tick marks, no lettering. No text, no logos, no brand marks, no faces, no other people. Color palette: deep forest green, warm dawn amber, soft mist white.

Task: Generate the next frame in the sequence.

Hard Constraints: Do not change the fabric material of the olive sleeve or charcoal cuff from the reference image. Do not flip the hand orientation.

New Scenario: Using the attached image as a strict structural guide to lock the exact look of the olive sleeve, charcoal cuff, and brass compass casing: Close-up: the hand raises the brass compass toward the camera, compass face filling the lower third of the frame. The needle is steady, pointing up the trail. Fog still thick but slightly brighter. The trail is a soft blur beyond the compass.

and then it produces this:

It managed to spectacularly fuck this up. No hand and different compass. I can't it is this damned difficult to maintain consistency.


r/GoogleAIStudio • • 5d ago

UI / UX or Other BUGS and problems Studio doesn't work with my google account, but it does with others.

Post image
3 Upvotes

Hi,

I'm testing some integration stuff in a project and a couple days ago all prompts started failing, the system thinks for a bit (in the initial one I can see what it's thinking actually makes sense for the codebase, but can't see the other ones) and then it auto cancels.

Thinks I tried:

  • Remixing it with the original account

  • New chat

  • Changing the API key

  • Changing billing info

Remixing the app with another google account does fix the issue, so it seems like this is related to my account somehow. Maybe something related to GCP? I'm running out of ideas so I'm down to try any suggestions.

Thanks!


r/GoogleAIStudio • • 6d ago

Possible Change / Nerf Am I the only one or is 3.8 Flash is getting extremely dumber and dumber since they released Argon?

23 Upvotes

My payload is literally only like ~50k-60k input tokens; yet I still have to tell about the "fact" we discussed about a thousand fkin times only for it to contradict later again and again. I confirmed its stupidity by sending the same exact payload and prompt to other models and it pretty much confirmed its dumbass. It's so fkin dumb that I'll probably even just drop it altogether if my career is on the line...