I'll build a goldfish hero shot: procedurally modeled S-curved body, flowing tail, translucent fins, scale-pattern material, circular "instantly nameable" floor, and a watery teal backdrop.

import bpy, math
from math import sin, pi

# clean scene
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
for m in list(bpy.data.meshes):
    bpy.data.meshes.remove(m)

L = 3.0          # body length
def sdx(y):      # S-curve offset in X
    return 0.32*sin((y+1.5)*(2*pi/L))

# ---------- BODY ----------
bpy.ops.mesh.primitive_uv_sphere_add(segments=48, ring_count=32, location=(0,0,0))
body = bpy.context.active_object
body.name = "Goldfish"
body.scale = (0.55, 1.5, 0.78)
bpy.ops.object.transform_apply(scale=True)
# taper toward tail a bit + S-curve
for v in body.data.vertices:
    t = (v.co.y+1.5)/L
    if t > 0.55:
        f = 1.0 - 0.35*((t-0.55)/0.45)
        v.co.x *= f; v.co.z *= f
    v.co.x += sdx(v.co.y)
mod = body.modifiers.new("sub","SUBSURF"); mod.levels=2; mod.render_levels=2

# ---------- TAIL FIN ----------
R, C = 14, 20
verts=[]; faces=[]
for i in range(R):
    t = i/(R-1)
    y = 1.35 + t*2.4
    h = 0.10 + 1.30*(t**1.25)
    for j in range(C):
        u = j/(C-1)
        z = -h + 2*h*u
        if i == R-1:                      # wavy trailing edge
            z += 0.16*sin(u*2*pi*1.5)
        verts.append((sdx(y), y, z))
for i in range(R-1):
    for j in range(C-1):
        a=i*C+j; b=a+1; c=a+C; d=c+1
        faces.append((a,b,d,c))
mesh = bpy.data.meshes.new("tail"); mesh.from_pydata(verts,[],faces)
tail = bpy.objects.new("TailFin", mesh)
bpy.context.scene.collection.objects.link(tail)
sol = tail.modifiers.new("sol","SOLIDIFY"); sol.thickness=0.03

# ---------- DORSAL FIN ----------
rows=[]
for i in range(10):
    t=i/9
    y=-0.7+t*1.7
    base_z = 0.72*math.sqrt(max(0.001,1-(abs(y)/1.55)**2))*0.98
    hgt = 0.55*sin(pi*min(1,t*1.1))**0.8
    tip = base_z+hgt + (0.07*sin(t*9) if i==9 else 0)
    rows.append(((sdx(y),y,base_z),(sdx(y),y,tip)))
verts=[v for r in rows for v in r]
faces=[(i,i+1,i+3,i+2) for i in range(0,len(verts)-2,2)]
mesh = bpy.data.meshes.new("dorsal"); mesh.from_pydata(verts,[],faces)
dorsal = bpy.objects.new("DorsalFin", mesh); bpy.context.scene.collection.objects.link(dorsal)
dorsal.modifiers.new("sol","SOLIDIFY").thickness=0.025

# ---------- PECTORAL FINS ----------
pecs=[]
for sx in (1,-1):
    bpy.ops.mesh.primitive_circle_add(vertices=24, radius=0.38, fill_type='NGON')
    p=bpy.context.active_object
    p.scale=(1,0.55,1)
    bpy.ops.object.transform_apply(scale=True)
    p.location=(sx*0.52+sdx(-0.55), -0.55, -0.12)
    p.rotation_euler=(pi/2*0+ -0.9, sx*0.9, sx*-0.5)
    p.modifiers.new("sol","SOLIDIFY").thickness=0.02
    p.name="PectoralFin.L" if sx>0 else "PectoralFin.R"
    pecs.append(p)

# ---------- EYES ----------
for sx in (1,-1):
    bpy.ops.mesh.primitive_uv_sphere_add(segments=24, ring_count=16, radius=0.145,
        location=(sx*0.43+sdx(-0.95), -0.95, 0.17))
    e=bpy.context.active_object
    e.name="Eye.L" if sx>0 else "Eye.R"

bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.shade_smooth()
print("geometry done", len(bpy.data.objects))


Traceback (most recent call last):
  File "<repo>\.runner\blender-mcp-v1.0.0\addon\mcp_to_blender_server.py", line 230, in _execute_code
    exec(code, namespace)
    ~~~~^^^^^^^^^^^^^^^^^
  File "<string>", line 48, in <module>
AttributeError: module 'bpy' has no attribute 'objects'